On Fri, Aug 17, 2018 at 5:32 AM, Chris Barker via Python-ideas <python-ideas@python.org> wrote: > hmm -- made me think that generators are doing something different here -- > and indeed they are. If you use regular functions: > > In [30]: def local_modifying(loc): > ...: """ > ...: adds a "fred" key to the dict passed in > ...: """ > ...: print("locals passed in:", loc) > ...: loc['fred'] = 5 > ...: print("locals after adding", loc) > ...: > > In [31]: def test_locals(): > ...: """ > ...: a simple local namespace to use > ...: """ > ...: a = 1 > ...: b = 2 > ...: local_modifying(locals()) > ...: # does "fred" exist? > ...: print(locals()) > ...: # and we can access it the usual way > ...: print("fred:", fred) > ...: > In [32]: test_locals() > locals passed in: {'b': 2, 'a': 1} > locals after adding {'b': 2, 'a': 1, 'fred': 5} > {'b': 2, 'a': 1, 'fred': 5} > fred: 5 > > It seems you CAN modify the locals dict passed in, and the change will show > up in the enclosing scope. > > But it sounds like that is not guaranteed by the language.
I've no idea what interpreter you're using, but it doesn't work for me. >>> test_locals() locals passed in: {'a': 1, 'b': 2} locals after adding {'a': 1, 'b': 2, 'fred': 5} {'a': 1, 'b': 2, 'fred': 5} Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 11, in test_locals NameError: name 'fred' is not defined You've changed a cached dictionary but haven't actually created a local. ChrisA _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/