重複の可能性:
Python 変数スコープの質問
Python マニュアルでは、スコープを次のように定義しています。
スコープは、ブロック内の名前の可視性を定義します。ローカル変数がブロックで定義されている場合、そのスコープにはそのブロックが含まれます。定義が関数ブロックで発生する場合、含まれるブロックが名前の別のバインディングを導入しない限り、スコープは定義ブロック内に含まれるすべてのブロックに拡張されます。
私はこのプログラムを持っています:
import random
def f():
a = "Is the scope static?"
if random.randint(0, 1) == 1:
del a
print a
印刷が失敗する確率は 50% です。
>>> f()
Is the scope static?
>>> f()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in f
UnboundLocalError: local variable 'a' referenced before assignment
それによって、print ステートメントが 'a' の範囲外である可能性は 50% あると思いますが、私は間違っている可能性があります。Pythonでのスコープの「正しい」解釈は何ですか? Pythonの変数のスコープは静的に定義されていますか? 変数「a」のスコープは?