¿Por qué este intento de crear una lista de funciones curried no funciona?¿Qué está pasando con la expresión lambda en esta función python?
def p(x, num):
print x, num
def test():
a = []
for i in range(10):
a.append(lambda x: p (i, x))
return a
>>> myList = test()
>>> test[0]('test')
9 test
>>> test[5]('test')
9 test
>>> test[9]('test')
9 test
¿Qué está pasando aquí?
Una función que realmente hace lo que espero la función anterior a hacer es:
import functools
def test2():
a = []
for i in range (10):
a.append(functools.partial(p, i))
return a
>>> a[0]('test')
0 test
>>> a[5]('test')
5 test
>>> a[9]('test')
9 test
Dado que tiene una solución que utiliza functools.partial, ¿cuál es la pregunta? –
La pregunta es, ¿por qué no funciona el primer método? – David