我相信Python使用函數作用域作爲局部變量。也就是說,在任何給定的函數中,如果您爲某個局部變量賦值,則該函數將從該函數內的那一刻起可用,直到它返回。因此,由於您的代碼的兩個分支都保證分配給a
,所以最初不需要將None
分配給a
。
請注意,如果您還可以訪問在外部函數中聲明的變量 - 換句話說,Python有閉包。
def adder(first):
def add(second):
return first + second
return add
這定義了一個稱爲加法器的函數。當用參數first
調用時,它將返回一個函數,它將接收的任何參數添加到first
並返回該值。例如:
add_two = adder(2)
add_three = adder(3)
add_two(4) # = 6
add_three(4) # = 7
不過,雖然你可以閱讀從外部函數的值,你不能改變它(不像許多其他語言)。例如,設想嘗試實施累加器。你可能會寫代碼,像這樣:
def accumulator():
total = 0
def add(number):
total += number
return total
return add
不幸的是,試圖在一個錯誤信息使用此代碼的結果:
UnboundLocalError: local variable 'total' referenced before assignment
這是因爲total += number
試圖線路改變total
的價值,不能用在Python中以這種方式完成。
在python中沒有「聲明」一個變量的東西! – 2010-03-01 23:06:28