[Python-Dev] locals(), closures, and IronPython... (original) (raw)
Terry Reedy tjreedy at udel.edu
Tue Mar 6 01:02:47 CET 2007
- Previous message: [Python-Dev] locals(), closures, and IronPython...
- Next message: [Python-Dev] Access to bits for a PyLongObject
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
"Dino Viehland" <dinov at exchange.microsoft.com> wrote in message news:7AD436E4270DD54A94238001769C22276A624C7482 at DF-GRTDANE-MSG.exchange.corp.microsoft.com... def a(): x = 4 y = 2 def b(): print y, locals() print locals() b()
a()
in CPython prints:
{'y': 2, 'x': 4, 'b': <function b at 0x020726F0>} 2 {'y': 2}
I'm wondering if it's intentional that these don't print dictionaries w/ the same contents or if it's more an accident of the implementation. In other words would it be reasonable for IronPython to promote all of the locals of a into b's dictionary when both a and b call locals?
========================================== This version
def a(): x = 4 y = 2 def b(): print y, locals() print locals() return b
a()()
has essentially the same output, as it should. Do you really want the binding of 'x' and 'b' to survive the a's return? I see no reason why a's call of locals() should affect this either way. Which is to say, why the compilation of b should be affected by the code that follows it.
This version also has the same output
def a(): x = 4 def b(): print y, locals() y = 2 print locals() return b
a()()
whereas this omits y from a's output, but not b's:
def a(): x = 4 def b(): print y, locals() print locals() y = 2 return b
a()()
and would also if b were called instead of returned, as in your version. So it would not make too much sense for the two printouts to match.
Terry Jan Reedy
- Previous message: [Python-Dev] locals(), closures, and IronPython...
- Next message: [Python-Dev] Access to bits for a PyLongObject
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]