On 5/31/2011 8:09 PM, harrismh777 wrote:
At the moment I'm only speaking about my OP and that particular list comprehension... the thing that happened (at least for me) is that the intuitive sense that each 'i' somehow becomes a part of the anonymous function (I know, not so) is built-in. There is little to nothing indicating in the docs that this is not so
On the contrary, the docs very explicitly say that a lambda expression is equivalent to a def statement.
"[Lambda forms (lambda expressions)] are a shorthand to create anonymous functions; the expression lambda arguments: expression yields a function object. The unnamed object behaves like a function object defined with
def <lambda>(arguments): return expression" ? Again, what we have here is
the 'i' being saved in a cell and looked up at call time (an implementation detail, 'late-binding') that is critical for the user-coder to understand.
Again, exactly the same as if the function were created with a def statement.
I'm not commenting on that, but it seems to me that if lambda is going to remain in the language at all that 'early-binding' in the lambda specific case would make sense; at least make the lambda more useful generally.
I disagree. Currently, late-binding is the default, with early-binding an option through a few different mechanisms. Making early binding the default would *reduce* the usefulness by eliminating the late-binding option and would add nothing that cannot be done now.
There are some people whose 'intuition' is the opposite of yours. They instead want to eliminate the early-binding option of default argument expressions. They want to reduce flexibility in the other direction. Both proposals are equally bad.
-- Terry Jan Reedy -- http://mail.python.org/mailman/listinfo/python-list