cpx...@gmail.com writes: >>>> li=[lambda :x for x in range(10)] >>>> res=li[0]() >>>> print res > 9 > > why?
Because each of the ten functions will report the final value of the same x. There are a couple of tricks to capture the transient value: [lambda w=x: w for x in range(10)] [(lambda w: (lambda :w))(x) for x in range(10)] The former works because the default value of w is whatever x was when the function object was created. I think the latter does what you thought you were doing, but it's harder to read and probably the difference should not matter much in practice. You can call w x in both tricks if you like. -- https://mail.python.org/mailman/listinfo/python-list