Ned Deily wrote:
In article <4a28903b.4020...@sweetapp.com>,
 Brian Quinlan <br...@sweetapp.com> wrote:
Scott David Daniels wrote:
[snipped]
When you evaluate a lambda expression, the default args are evaluated,
but the expression inside the lambda body is not.  When you apply that
evaluated lambda expression, the expression inside the lambda body is
is evaluated and returned.
But that's not really the issue. I knew that the lambda was not evaluated but thought each generator expression got its own context rather than sharing one.

Each? Maybe that's a source of confusion. There is only one generator expression in your example.

c = (lambda : i for i in range(11, 16))
c
<generator object <genexpr> at 0x114e90>
d = list(c)
d
[<function <lambda> at 0x119348>, <function <lambda> at 0x119390>, <function <lambda> at 0x1193d8>, <function <lambda> at 0x119420>, <function <lambda> at 0x119468>]


Sorry, I wasn't as precise as I should have been.

If you consider this example:
(<expr> for x in y)

I thought that every time that <expr> was evaluated, it would be done in a new closure with x bound to the value of x at the time that the closure was created.

Instead, a new closure is created for the entire generator expression and x is updated inside that closure.

Cheers,
Brian
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to