can this be done without eval/exec?
Schüle Daniel
uval at rz.uni-karlsruhe.de
Wed Apr 26 21:24:04 EDT 2006
Hello group,
>>> lst=[]
>>> for i in range(10):
... lst.append(eval("lambda:%i" % i))
...
>>> lst[0]()
0
>>> lst[1]()
1
>>> lst[9]()
9
>>>
>>> lst=[]
>>> for i in range(10):
... exec "tmp = lambda:%i" % i # assignment is not expression
... lst.append(tmp)
...
>>> lst[0]()
0
>>> lst[1]()
1
>>> lst[9]()
9
>>>
and now the obvious one (as I thought at first)
>>> lst=[]
>>> for i in range(10):
... lst.append(lambda:i)
...
>>> lst[0]()
9
>>> i
9
>>>
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
More information about the Python-list
mailing list