gvim writes: > Given that Python, like Ruby, is an object-oriented language why > doesn't this: > > def m(): > a = [] > for i in range(3): a.append(lambda: i) > return a > > b = m() > for n in range(3): print(b[n]()) # => 2 2 2
I'm going to suggest two variations that may or may not work for you, with very brief glosses. Just ignore them if you don't see their relevance. First, consider: def w(): a = [] for i in range(3): a.append(lambda: i) i = "!" return a b = w() for f in b: print(f()) # => ! ! ! (Those functions depend on the i in the loop.) > lambda i=i: i > > ... is needed to make it work in Python. Just wondered why? And second, consider: lambda x=i: x (Those functions are independent of the i in the loop.) -- https://mail.python.org/mailman/listinfo/python-list