Hello group,
[color=blue][color=green][color=darkred]
>>> lst=[]
>>> for i in range(10):[/color][/color][/color]
.... lst.append(eval ("lambda:%i" % i))
....[color=blue][color=green][color=darkred]
>>> lst[0]()[/color][/color][/color]
0[color=blue][color=green][color=darkred]
>>> lst[1]()[/color][/color][/color]
1[color=blue][color=green][color=darkred]
>>> lst[9]()[/color][/color][/color]
9[color=blue][color=green][color=darkred]
>>>[/color][/color][/color]
[color=blue][color=green][color=darkred]
>>> lst=[]
>>> for i in range(10):[/color][/color][/color]
.... exec "tmp = lambda:%i" % i # assignment is not expression
.... lst.append(tmp)
....[color=blue][color=green][color=darkred]
>>> lst[0]()[/color][/color][/color]
0[color=blue][color=green][color=darkred]
>>> lst[1]()[/color][/color][/color]
1[color=blue][color=green][color=darkred]
>>> lst[9]()[/color][/color][/color]
9[color=blue][color=green][color=darkred]
>>>[/color][/color][/color]
and now the obvious one (as I thought at first)
[color=blue][color=green][color=darkred]
>>> lst=[]
>>> for i in range(10):[/color][/color][/color]
.... lst.append(lamb da:i)
....[color=blue][color=green][color=darkred]
>>> lst[0]()[/color][/color][/color]
9[color=blue][color=green][color=darkred]
>>> i[/color][/color][/color]
9[color=blue][color=green][color=darkred]
>>>[/color][/color][/color]
I think I understand where the problem comes from
lambda:i seems not to be fully evalutated
it just binds object with name i and not the value of i
thus lst[0]() is not 0
are there other solutions to this problem
without use of eval or exec?
Regards, Daniel
[color=blue][color=green][color=darkred]
>>> lst=[]
>>> for i in range(10):[/color][/color][/color]
.... lst.append(eval ("lambda:%i" % i))
....[color=blue][color=green][color=darkred]
>>> lst[0]()[/color][/color][/color]
0[color=blue][color=green][color=darkred]
>>> lst[1]()[/color][/color][/color]
1[color=blue][color=green][color=darkred]
>>> lst[9]()[/color][/color][/color]
9[color=blue][color=green][color=darkred]
>>>[/color][/color][/color]
[color=blue][color=green][color=darkred]
>>> lst=[]
>>> for i in range(10):[/color][/color][/color]
.... exec "tmp = lambda:%i" % i # assignment is not expression
.... lst.append(tmp)
....[color=blue][color=green][color=darkred]
>>> lst[0]()[/color][/color][/color]
0[color=blue][color=green][color=darkred]
>>> lst[1]()[/color][/color][/color]
1[color=blue][color=green][color=darkred]
>>> lst[9]()[/color][/color][/color]
9[color=blue][color=green][color=darkred]
>>>[/color][/color][/color]
and now the obvious one (as I thought at first)
[color=blue][color=green][color=darkred]
>>> lst=[]
>>> for i in range(10):[/color][/color][/color]
.... lst.append(lamb da:i)
....[color=blue][color=green][color=darkred]
>>> lst[0]()[/color][/color][/color]
9[color=blue][color=green][color=darkred]
>>> i[/color][/color][/color]
9[color=blue][color=green][color=darkred]
>>>[/color][/color][/color]
I think I understand where the problem comes from
lambda:i seems not to be fully evalutated
it just binds object with name i and not the value of i
thus lst[0]() is not 0
are there other solutions to this problem
without use of eval or exec?
Regards, Daniel
Comment