Hi!
I was doing something like this:
[color=blue][color=green][color=darkred]
>>> def p( x ):[/color][/color][/color]
.... print x
....[color=blue][color=green][color=darkred]
>>> l = []
>>> for i in range( 5 ):[/color][/color][/color]
.... l.append( lambda: p( i ) )
....[color=blue][color=green][color=darkred]
>>> for k in l:[/color][/color][/color]
.... 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:
[color=blue][color=green][color=darkred]
>>> def mylambda( fn, *args ):[/color][/color][/color]
.... return lambda: apply( fn, args )
....[color=blue][color=green][color=darkred]
>>> l = []
>>> for i in range( 5 ):[/color][/color][/color]
.... l.append( mylambda( p, i ) )
....[color=blue][color=green][color=darkred]
>>> for k in l:[/color][/color][/color]
.... k()
....
0
1
2
3
4
But I still feel a bit unsatisfied. Do you have some advice for me?
Cheers,
Daniel
I was doing something like this:
[color=blue][color=green][color=darkred]
>>> def p( x ):[/color][/color][/color]
.... print x
....[color=blue][color=green][color=darkred]
>>> l = []
>>> for i in range( 5 ):[/color][/color][/color]
.... l.append( lambda: p( i ) )
....[color=blue][color=green][color=darkred]
>>> for k in l:[/color][/color][/color]
.... 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:
[color=blue][color=green][color=darkred]
>>> def mylambda( fn, *args ):[/color][/color][/color]
.... return lambda: apply( fn, args )
....[color=blue][color=green][color=darkred]
>>> l = []
>>> for i in range( 5 ):[/color][/color][/color]
.... l.append( mylambda( p, i ) )
....[color=blue][color=green][color=darkred]
>>> for k in l:[/color][/color][/color]
.... k()
....
0
1
2
3
4
But I still feel a bit unsatisfied. Do you have some advice for me?
Cheers,
Daniel
Comment