On Wed, Jul 26, 2017 at 4:36 AM, eryk sun <eryk...@gmail.com> wrote: > On Tue, Jul 25, 2017 at 8:43 AM, Chris Angelico <ros...@gmail.com> wrote: >> >> I'm not actually sure what happens if you use a global declaration at >> top level. Is it ignored? Is it an error? > > It isn't ignored, but it shouldn't make a difference since normally at > module level locals and globals are the same. It makes a difference in > an exec() that uses separate locals and globals dicts. For example: > > >>> exec('print(x)', {'x':'G'}, {'x':'L'}) > L > >>> exec('global x; print(x)', {'x':'G'}, {'x':'L'}) > G
Thanks. Of course, that doesn't change the fact that it'll look very odd - but at least it won't cause a problem. Now, if you wanted to write Py2/Py3 compatibility code inside a function, you'd have issues, because you can't use nonlocal in Py2... but that's a separate issue. Hmm. Aside from messing around with exec, is there any way to have a local and a global with the same name, and use the global? You could do it with a nonlocal: x = "G" def f(): x = "L" def g(): global x print(x) g() but is there any way to engineer this actual situation without exec? ChrisA -- https://mail.python.org/mailman/listinfo/python-list