47 votes

Extraits de python courts (et utiles)

Dans l'esprit de la "quelle est votre plus utile C/C++" extrait de - thread:

Ne vous les gars ont court, monofonctionnel les fragments Python que vous utilisez (souvent) et que vous souhaitez partager avec la StackOverlow de la Communauté? Veuillez conserver les entrées de petite taille (moins de 25 ans lignes peut-être?) et ne donner qu'un exemple par la poste.

Je vais commencer avec un court extrait de code que j'utilise de temps en temps, à compter du sloc (lignes de code source) en python projets:

# prints recursive count of lines of python source code from current directory
# includes an ignore_list. also prints total sloc

import os
cur_path = os.getcwd()
ignore_set = set(["__init__.py", "count_sourcelines.py"])

loclist = []

for pydir, _, pyfiles in os.walk(cur_path):
    for pyfile in pyfiles:
        if pyfile.endswith(".py") and pyfile not in ignore_set:
            totalpath = os.path.join(pydir, pyfile)
            loclist.append( ( len(open(totalpath, "r").read().splitlines()),
                               totalpath.split(cur_path)[1]) )

for linenumbercount, filename in loclist: 
    print "%05d lines in %s" % (linenumbercount, filename)

print "\nTotal: %s lines (%s)" %(sum([x[0] for x in loclist]), cur_path)

35voto

Jacob Gabrielson Points 8800

J'aime utiliser any et un générateur:

 if any(pred(x.item) for x in sequence):
    ...
 

au lieu d'un code écrit comme ceci:

 found = False
for x in sequence:
    if pred(x.n):
        found = True
if found:
    ...
 

J'ai d'abord appris cette technique dans un article de Peter Norvig.

22voto

theycallmemorty Points 4609

Le seul "truc" que je connaisse qui m'a vraiment séduit quand j'ai appris qu'il s'agissait d'énumérer. Il vous permet d’avoir accès aux index des éléments d’une boucle for.

 >>> l = ['a','b','c','d','e','f']
>>> for (index,value) in enumerate(l):
...     print index, value
... 
0 a
1 b
2 c
3 d
4 e
5 f
 

22voto

Eli Bendersky Points 82298

Initialiser une liste 2D

Bien que cela puisse être fait en toute sécurité pour initialiser une liste:

 lst = [0] * 3
 

La même astuce ne fonctionnera pas pour une liste 2D (liste de listes):

 >>> lst_2d = [[0] * 3] * 3
>>> lst_2d
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> lst_2d[0][0] = 5
>>> lst_2d
[[5, 0, 0], [5, 0, 0], [5, 0, 0]]
 

L'opérateur * duplique ses opérandes et les listes dupliquées construites avec [] pointent sur la même liste. La bonne façon de faire est:

 >>> lst_2d = [[0] * 3 for i in xrange(3)]
>>> lst_2d
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> lst_2d[0][0] = 5
>>> lst_2d
[[5, 0, 0], [0, 0, 0], [0, 0, 0]]
 

17voto

AKX Points 14236

zip(*iterable) transpose une itérable.

 >>> a=[[1,2,3],[4,5,6]]
>>> zip(*a)
    [(1, 4), (2, 5), (3, 6)]
 

C'est aussi utile avec les dict.

 >>> d={"a":1,"b":2,"c":3}
>>> zip(*d.iteritems())
[('a', 'c', 'b'), (1, 3, 2)]
 

16voto

Adam Lehenbauer Points 46

Lancez un simple serveur Web pour les fichiers du répertoire en cours:

 python -m SimpleHTTPServer
 

Utile pour partager des fichiers.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X