Why doesn't eval of generator expression work with locals?

Steve Holden steve at holdenweb.com
Wed Jan 28 12:55:43 EST 2009


Gabriel Genellina wrote:
> En Wed, 28 Jan 2009 01:36:57 -0200, Steve Holden <steve at holdenweb.com>
> escribió:
>> Gabriel Genellina wrote:
>>> En Tue, 27 Jan 2009 22:17:16 -0200, Robert Kern <robert.kern at gmail.com>
>>> escribió:
> 
>>> I *thought* I did understand this until I came to this example:
>>>
>>> 1)
>>>>>> id(globals()), id(locals())
>>> (11239760, 11239760)
>>>
>>> # ok, globals and locals are the same at the module level
>>>
>>> 2)
>>>>>> s = "(id(n) for n in [globals(),locals()])"
>>>>>> list(eval(s))
>>> [11239760, 11239760]  # still the same results
>>>
>>> 3)
>>>>>> s = "(id(n()) for n in [globals,locals])"
>>>>>> list(eval(s))
>>> [11239760, 12583248]  # locals() is different
>>>
>> No, locals is different, not locals(). You are looking at two different
>> functions that return the same object when called in the given context,
>> that's all.
> 
> Perhaps you didn't notice that I shifted the () from right to left. I'm
> always printing the result of *calling* globals and locals -- the only
> change is *where* I do call them.
> 
Ah, right. As you were ...

regards
 Steve
-- 
Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC              http://www.holdenweb.com/




More information about the Python-list mailing list