On Thu, 06 May 2010 16:53:07 -0300 Ricardo Aráoz <ricar...@gmail.com> wrote:
> So you see, your functions just return the value of x. That's because > the lambda have no parameter, so x refers to the global name x. In other words, the "upvalue" (the variable captured in the closure) is referenced. Meaning if you later change it, the closure sees the change. The same in other dynamic languages. If you want the value to be captured in each func, use a second lambda to pass it: >>> funcs = [(lambda a: (lambda: a))(x) for x in range(5)] >>> [f() for f in funcs] [0, 1, 2, 3, 4] Or even ;-): >>> [(lambda a: (lambda: a))(x)() for x in range(5)] [0, 1, 2, 3, 4] ... but --> KISS principle http://en.wikipedia.org/wiki/Keep_it_simple_stupid Such syntaxes are only good for creating problems, imo. Why not make your life simple? (exception: for exploring the language's guts) Denis ________________________________ vit esse estrany ☣ spir.wikidot.com _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor