"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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4