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
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to