C'est même extrêmement important à comprendre au sujet des lambda :
i=1# i est résolu dans l'espace de nommage courantlambda1=lambda:i# i est résolu une fois à la création de la lambda et c'est ensuite le i "local" qui est résolu à l'executionlambda2=lambdai=i:iprint"lambda1:",lambda1()# 1 (i global)print"lambda2:",lambda2()# 1 (i à la création)i=2print"lambda1:",lambda1()# 2 print"lambda2:",lambda2()# 1
Et en beaucoup plus vicieux :
defcreate_mult_functions_bad(coefs):# toutes les lambda utilisent le même coef.# il est résolu a l’exécution des lambda. À ce moment là coef == coefs[-1]return[lambdaval:val*coefforcoefincoefs]defcreate_mult_functions(coefs):# coef est résolu à la création de la lamdbareturn[lambdaval,coef=coef:val*coefforcoefincoefs]mult1,mult2,mult3=create_mult_functions_bad([1,2,3])printmult1(1)# 3printmult2(1)# 3printmult3(1)# 3mult1,mult2,mult3=create_mult_functions([1,2,3])printmult1(1)# 1printmult2(1)# 2printmult3(1)# 3
[^] # Re: la valeur par défaut n'est évaluée qu'une fois
Posté par GaMa (site web personnel) . En réponse au journal Python et valeurs par défaut des paramètres. Évalué à 5.
C'est même extrêmement important à comprendre au sujet des lambda :
Et en beaucoup plus vicieux :
Matthieu Gautier|irc:starmad