On Mon, 26 Feb 2018 17:05:46 -0800, Dan Stromberg wrote: [...] > I don't have IronPython handy, but according my (quite possibly flawed) > test program, locals() is a copy on CPython 3, CPython 2, Pypy3, Pypy, > Jython and MicroPython. > > I didn't see any interpreters that returned the namespace itself. > > What am I missing?
Interesting... it seems that Jython is less consistent than I remembered. Here is my test function: def test(): y = 2 ns = locals() ns['x'] = 1 ns['y'] = 1 print(x, y) return # Fool the compiler into treating x as a local. if False: x = 999 In Jython 2.5, it prints (1, 2). So assigning to locals creates a new local variable (x) but doesn't update an existing one (y). In CPython, I get: UnboundLocalError: local variable 'x' referenced before assignment in versions 3.5, 2.7, 2,5, 2,4 and even 1.5 (it's just a regular NameError in 1.5). I broke my IronPython installation, but my recollection is that it would print (1, 1). (That's what I thought Jython did too, but I was mistaken.) So correction is noted: in Jython, at least, locals() is not the namespace itself, but some sort of weird proxy to it. -- Steve -- https://mail.python.org/mailman/listinfo/python-list