Possible en double:
“Least Astonishment” in Python: The Mutable Default ArgumentBug ou malentendu dans Python 2.7?
Suis-je manque quelque chose ou est-ce vraiment un bug? Voici une fonction récursive qui génère une liste multidimensionnelle à partir d'une spécification de tuple, par exemple.
dim((2,3))
returns
[[[],[],[]],[[],[],[]]]
Le seul problème est qu'il ajoute à la liste chaque fois que je l'appelle, si je l'appelle sans le paramètre par défaut, si je spécifie le paramètre par défaut comme faible ((2,3), []) , alors ça va. C'est en sauvegardant l'état du paramètre par défaut à chaque appel! Si personne ne peut trouver un problème avec ce que je fais, je vais l'entrer dans le rapporteur de bug python.
cdr = lambda l : l[1:]
car = lambda l : l[0]
last = lambda x : x[-1:][0]
def dim(t, c = []):
if len(t) > 0:
i = car(t)
for j in range(i):
c.append([])
dim(cdr(t), last(c))
return c
print dim([2,3])
print dim([2,3])
print dim([2,3])
print dim([2,3])
Exactement. Mais à nitpick, 'is' est préféré pour les comparaisons avec les singletons (le plus notable, bien sûr,' None') - c'est-à-dire 's/if c == None/si c est None /'. – delnan