なぜ次のコードは無効です:このコードが有効であるもののネストされた関数定義と範囲(UnboundLocalError)
def foo1(x=5):
def bar():
if x == 5:
x = 6
print(x)
bar()
:
def foo2(x=5):
def bar():
if x == 5:
print('ok')
print(x)
bar()
foo2()
あなたが期待する正確に何をしますが、foo1()
が得られますラインif x == 5:
のUnboundLocalError: local variable 'x' referenced before assignment
である。後でコードのxの値を変更すると、この条件が無効になるのはなぜですか?
Pythonはまず、コード内の割り当て操作を探します。それが起こった瞬間から、それはローカル変数と見なされます。それは実際にはそれほどエレガントでない結果です。 –