2
爲什麼下面的代碼無效:嵌套函數定義和範圍(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()
會給UnboundLocalError: local variable 'x' referenced before assignment
在線if x == 5:
。爲什麼在代碼中稍後改變x的值會使這個條件無效?
Python首先在代碼中查找賦值操作。從發生的那一刻起,它就被認爲是一個局部變量,這確實是一個(不那麼優雅)的結果。 –