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

Reply via email to