• [^] # Re: la valeur par défaut n'est évaluée qu'une fois

    Posté par (site web personnel) . En réponse au journal Python et valeurs par défaut des paramètres. Évalué à 4.

    J'ai dit lambda mais c'est exactement la même chose avec les fonction

    i = 1
    def f1():
     return i
    def f2(i=i):
     return i
    print f1() #1
    print f2() #1
    i=2
    print f1() #2
    print f2() #1
    def create_mult_functions_bad(coefs):
     ret = []
     for coef if coefs:
     def f(val):
     return val*coef
     return ret
    def create_mult_functions(coefs):
     ret = []
     for coef if coefs:
     def f(val, coef=coef):
     return val*coef
     return ret
    mult1, mult2, mult3 = create_mult_functions_bad([1,2,3])
    print mult1(1) # 3
    print mult2(1) # 3
    print mult3(1) # 3
    mult1, mult2, mult3 = create_mult_functions([1,2,3])
    print mult1(1) # 1
    print mult2(1) # 2
    print mult3(1) # 3
    
    

    Matthieu Gautier|irc:starmad