lambda trouble

Darabos Daniel cyhawk at sch.bme.hu
Fri Mar 19 11:48:32 EST 2004


Hi!

I was doing something like this:

>>> def p( x ):
...     print x
...
>>> l = []
>>> for i in range( 5 ):
...     l.append( lambda: p( i ) )
...
>>> for k in l:
...     k()
...
4
4
4
4
4

And it surprised me a little. I was expecting to see 0, 1, 2, 3, 4.
After some brainwork I now kind of understand what happens and I even
found a solution like this:

>>> def mylambda( fn, *args ):
...     return lambda: apply( fn, args )
...
>>> l = []
>>> for i in range( 5 ):
...     l.append( mylambda( p, i ) )
...
>>> for k in l:
...     k()
...
0
1
2
3
4

But I still feel a bit unsatisfied. Do you have some advice for me?

Cheers,

Daniel





More information about the Python-list mailing list