Tim Peters <[email protected]> added the comment:
This behavior is intended and expected, so I'm closing this.
As has been explained, in any kind of function (whether 'lambda' or 'def'), a
non-local variable name resolves to its value at the time the function is
evaluated, not the value it _had_ at the time the function was defined.
If you need to use bindings in effect at the time the function is defined, then
you need to do something to force that to happen. A common way is to abuse
Python's default-argument mechanism to initialize a local argument to the value
of a non-local variable at function definition time. In practice, e.g., this
means changing the
lambda a:
in your first example to
lambda a, i=i:
Then, when the lambda is defined ('lambda' and 'def' are executable statements
in Python! not just declarations), the then-current binding of non-local
variable 'i' is captured and saved away as the default value of the local
argument name 'i'.
----------
nosy: +tim.peters
resolution: -> not a bug
stage: -> resolved
status: open -> closed
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue38933>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com