lambda forms within a loop

Paul Rubin http
Sun Oct 25 21:42:11 CET 2009


Michal Ostrowski <mostrows at gmail.com> writes:
> def MakeLambdaBad():
>   a = []
>   for x in [1,2]:
>      a.append(lambda q:  x + q)
>   return a

The problem here is that x is a free variable in the lambdas that you
put in a.  When you actually evaluate those lambdas, they use whatever
the value of x happens to be at that time.  The cure is:

   for x in [1,2]:
      a.append(lambda q, x=x:  x + q)

This creates an additional binding inside the lambda, that captures
the value of the loop index when the lambda is made.



More information about the Python-list mailing list