>> 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