>> are there other solutions to this problem
>> without use of eval or exec?
>>
> 
> Using a factory function & closures instead of lambda:

 >>> def a(x):
...     def b():
...             return x
...     return b
...
 >>> lst=[]
 >>> for i in range(10):
...     lst.append(a(i))
...
 >>> lst[0]()
0
 >>> lst[1]()
1
 >>> lst[9]()
9
 >>>

yes this works
I was playing a little more with this idea
and got into the next trouble :)

 >>> cnt=0
 >>> def a():
...     def b():
...             return cnt
...     global cnt
...     cnt += 1
...     return b
...
 >>> lst=[]
 >>> for i in range(10):
...     lst.append(a())
...
 >>> lst[0]()
10
 >>> lst[1]()
10
 >>>

I figured out what was wrong, here is corrected version

 >>> cnt = 0
 >>> def a():
...     global cnt
...     tmp = cnt
...     def b():
...             return tmp
...     cnt += 1
...     return b
...
 >>> lst=[]
 >>> for i in range(10):
...     lst.append(a())
...
 >>> lst[0]()
0
 >>> lst[1]()
1
 >>>

Regards, Daniel
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to