6 ms·
The REPL essentially operates at the global scope, which is represented as a dictionary. Variables local to a function are not stored in a dictionary, however:
by sabauma 9y ago
The REPL essentially operates at the global scope, which is represented as a dictionary. Variables local to a function are not stored in a dictionary, however:
def main():
a = 1
d = locals()
print d
d['b'] = 123
print b
print d
print d is locals()
main()
Which prints
{'a': 1}
Traceback (most recent call last):
File "test.py", line 23, in <module>
main()
File "test.py", line 19, in main
print b
NameError: global name 'b' is not defined
- yorwba 9y agoThat's because the compiler doesn't know the locals() dictionary will be modified at runtime, so it treats b as a global variable (which happens to be undefined). To show that not even changes to existing local variables work, try def main(): a = 1 d = locals() print d b = None d['b'] = 123 print b print d print locals() print d is locals() which prints {'a': 1} None {'a': 1, 'b': 123} {'a': 1, 'b': None, 'd': {...}} True I.e. changes to the dictionary returned by locals() are ignored, and calling locals() again overrides the previous values.