Python Mystery Theatre -- Episode 2: Así Fue
Raymond Hettinger
vze4rx4y at verizon.net
Tue Jul 15 15:19:56 EDT 2003
[Chris Reedy]
> The fix is easy:
>
> flam = [lambda x, fn=f: fn(x) for f in funcs]
>
> which creates a new local binding which captures the correct value at
> each iteration. This is the kind of problem which makes me wonder
> whether we ought to re-think about binding of variables for loops.
Hmm, I put too many distractors in this one.
It's not about lambda and loops. And though it touches
on nested scopes and list comprehensions, the crux is
just plain old bound / unbound variables inside a function
definition:
>>> base = hex
>>> def changebase(x):
... return base(x)
>>> changebase(20)
'0x14'
>>> base = oct
>>> changebase(20)
'024'
It's a feature!
Raymond Hettinger
>
More information about the Python-list
mailing list