summation python3 loop hacer for example como python function

python3 - sum python example



Crear funciones en un bucle (1)

Se encuentra con un problema de vinculación tardía : cada función busca k más tarde posible (por lo tanto, cuando se llama test externa, esto ocurre después del final del ciclo).

Se arregla fácilmente forzando la vinculación anticipada: cambie def f(): def f(k=k): - valores predeterminados (la mano derecha k en k=k es un valor predeterminado para el argumento nombre k , que es la izquierda- k mano en k=k ) se buscan en el tiempo de def , no en el tiempo de call , por lo que esencialmente son una forma de buscar específicamente una vinculación anticipada.

Si está preocupado por obtener un argumento adicional (y, por lo tanto, puede que lo llamen erróneamente), hay una forma más sofisticada de utilizar una clausura como una "fábrica de funciones":

def make_f(kwargs, k): def f(): print k, kwargs[k] return f

y en su ciclo use f = make_f(kwargs, k) lugar de la declaración def .

Intento crear funciones dentro de un ciclo y almacenarlas en un diccionario. El problema es que todas las entradas en el diccionario parecen mapear a la última función creada. El código es así:

d = {} def test(**kwargs): for k in kwargs: def f(): print k, kwargs[k] d[k] = f f() test(foo=1, bar=2) print ''should print the same output as before'' d[''foo'']() d[''bar'']()

Esto produce:

foo 1 bar 2 should print the same output as before bar 2 bar 2

¿Alguna idea de por qué?