Something is rotten in Denmark...

Ian Kelly ian.g.kelly at gmail.com
Tue May 31 03:35:27 EDT 2011


On Tue, May 31, 2011 at 12:48 AM, harrismh777 <harrismh777 at charter.net> wrote:
>     What is going on with the binding in the first construct... this seems
> to reduce the usefulness of lambda to a considerable extent?

I don't see why; as you've shown there are a couple of simple ways to
avoid this problem.  The trick is just to recognize that when you have
a closure around a variable, and that variable needs to change, but
the value in the closure needs to be constant, then what you really
need are two separate variables -- the cell variable needs to be
promoted to a local.  How you accomplish that is not terribly
important.

One other technique that is sometimes preferable is functools.partial, e.g.:

fs = [functools.partial(operator.add, i) for i in range(10)]

Tangentially, I'd like to point out that this line:

[fs[i](1) for i in range(10)]

is more naturally written as:

[f(1) for f in fs]



More information about the Python-list mailing list