Eryk Sun <[email protected]> added the comment:
> If exec gets two separate objects as globals and locals,
> the code will be executed as if it were embedded in a
> class definition.
That's a misleading comparison because a class definition intentionally
supports nonlocal closures, which exec() doesn't support and shouldn't support.
For example:
a = 1
def f():
a = 2
class C:
print(a)
def g():
a = 2
class C:
nonlocal a
a = 3
print(a)
>>> f()
2
>>> g()
3
exec() executes as module code. Using separate globals and locals mappings
doesn't magically change how the code is compiled and executed to make it
equivalent to a class definition. To understand the case of separate globals
and locals, just remember that assigning to a variable by default makes it a
local variable, unless it's declared as a global. Also, class and function
definitions are implicitly an assignment, which by default will be local.
----------
nosy: +eryksun
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue46153>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com