Why doesn't eval of generator expression work with locals?
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Sat Jan 31 00:48:55 EST 2009
En Fri, 30 Jan 2009 06:42:22 -0200, Peter Otten <__peter__ at web.de>
escribió:
> Gabriel Genellina wrote:
>> g = (x+B for x in A)
>
> I think it helps understanding if you translate the above to
>
>>>> A = [1,2,3]
>>>> B = 1
>>>> def f(a):
> ... for x in a:
> ... yield x+B
> ...
>>>> g = f(A)
>>>> A = [4,5,6]
>>>> B = 10
>>>> print list(g)
> [11, 12, 13]
>
> This is not altogether unintuitive, but I think I would prefer if it
> worked
> like
>
>>>> A = [1,2,3]
>>>> B = 1
>>>> def f(a, b):
> ... for x in a:
> ... yield x+b
> ...
>>>> g = f(A, B)
>>>> A = [4,5,6]
>>>> B = 10
>>>> list(g)
> [2, 3, 4]
>
> i. e. every name were bound early. Of course this wouldn't help with
> locals() which would still be called in different scopes.
Yep -- although I would like all names were late bound instead. But as I
posted in another message, in this case "practicality beat purity" and a
special case was made for the leftmost iterable.
--
Gabriel Genellina
More information about the Python-list
mailing list