The documentation for the locals() function specifically warns not to modify its output, as interpreters may not reflect changes in the local scope. I'm assuming that means the Python spec doesn't require it, even though it works in CPython.
I'd like to know if this is the same for globals(). There's no warning in the documentation, but I find it strange that this would differ as each function apparently performs the same action on a different scope.
If it's safe, modifying globals()' output would improve the simplicity and compatibility of a project I'm working on.
Python – globals() function globals() function in Python returns the dictionary of current global symbol table. Symbol table: Symbol table is a data structure which contains all necessary information about the program. These include variable names, methods, classes, etc.
globals() always returns the dictionary of the module namespace. locals() always returns a dictionary of the current namespace. vars() returns either a dictionary of the current namespace (if called with no argument) or the dictionary of the argument.
__globals__ : A reference to the dictionary that holds the function's global variables — the global namespace of the module in which the function was defined.
Modifying locals()
doesn't work reliably, even in CPython. It happens to work in module and class scopes, but it fails inside a function (any modifications "won't take", since locals()
provides a copy of the local namespace in that case, rather than a reference to the real thing)
However, globals()
is different, since that always refers to the module namespace, and module namespaces are required to behave like ordinary dictionaries. So yes, the lack of a warning on globals()
isn't an oversight, it really is allowed.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With