Pythonドキュメントからのローカル/グローバル/自由変数の定義:
名前がブロックにバインドされている場合、非ローカルとして宣言されていない限り、その名前はそのブロックのローカル変数です。名前がモジュールレベルでバインドされている場合、それはグローバル変数です。(モジュールコードブロックの変数はローカルおよびグローバルです。)変数がコードブロックで使用されているが、そこで定義されていない場合、それは自由変数です。
コード1:
>>> x = 0
>>> def foo():
... print(x)
... print(locals())
...
>>> foo()
0
{}
コード2:
>>> def bar():
... x = 1
... def foo():
... print(x)
... print(locals())
... foo()
...
>>> bar()
1
{'x':1}
自由変数は、関数ブロックで呼び出されたときに返されますがlocals()
、クラスブロックでは返されません。
でCode 1
、x
はグローバル変数であり、で使用されますが、で定義されていませんfoo()
。
ただし、によって返されるわけではないため、自由変数locals()
ではありません。
私はそれが医者が言ったことではないと思います。自由変数の技術的な定義はありますか?