Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it safe to modify the output of globals()?

Tags:

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.

like image 536
rspeed Avatar asked May 11 '11 03:05

rspeed


People also ask

What does globals () do in Python?

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.

What is the difference between locals () and globals ()?

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.

What is __ globals __ in Python?

__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.


1 Answers

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.

like image 135
ncoghlan Avatar answered Nov 05 '22 20:11

ncoghlan