"gangesmaster" <[EMAIL PROTECTED]> writes:
> what i see as a bug is this code not working as expected:
>
> >>> def make_foos(names):
> ... funcs = []
> ... for n in names:
> ... def foo():
> ... print "my name is", n
> ... funcs.append(foo)
> ... return funcs
But it does work as expected, if your expectations are based on what
closures actually do.
> i have to create yet another closure, make_foo, so that the name
> is correctly bound to the object, rather than the frame's slot:
The Python idiom is:
def make_foos(names):
funcs = []
for n in names:
def foo(n=n):
print "my name is", n
funcs.append(foo)
return funcs
The n=n in the "def foo" creates the internal binding that you need.
--
http://mail.python.org/mailman/listinfo/python-list