[Python-Dev] 2.5 and beyond
Nick Coghlan
ncoghlan at gmail.com
Sat Jul 1 10:35:02 CEST 2006
Giovanni Bajo wrote:
> Yes but:
>
>>>> a = []
>>>> for i in range(10):
> ... a.append(lambda: i)
> ...
>>>> print [x() for x in a]
> [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
>
> This subtle semantic of lambda is quite confusing, and still forces people to
> use the "i=i" trick.
If you'd like each function instance to have a separate closure scope, then
*give* each function a separate closure scope, instead of making them all
share the same one the way you have above:
>>> def make_f(i):
... def f():
... return i
... return f
...
>>> a = []
>>> for i in range(10):
... a.append(make_f(i))
...
>>> print [x() for x in a]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
---------------------------------------------------------------
http://www.boredomandlaziness.org
More information about the Python-Dev
mailing list