一旦你调用它,Python就会检查它。
导入并直接输入解释器时,它只关心您是否违反了任何语法规则。它不关心这个级别的本地人或全球人。
>>> def foo():
... print locals()
... bar = 34
... print locals()
... DIP = SET
...
>>>
>>> foo()
{}
{'bar': 34}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in foo
NameError: global name 'SET' is not defined
它从上到下运行,并检查 locals() 和 globals() 如果它看到该变量,那么它就可以了,并对其进行任何处理。
它甚至适用于定义和子定义..或您分配的任何其他内容
>>> def foo():
... bar()
... def bar():
... print("never gonna give you up")
...
>>>
>>> foo()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in foo
UnboundLocalError: local variable 'bar' referenced before assignment