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