題目:利用閉包返回一個計數器函數,每次調用它返回遞增整數
我一開始是這麼寫的
def createCounter():
i = 0
def counter():
i+=1
return i
return counter
但是發生了報錯
Traceback (most recent call last):
File "main.py", line 12, in <module>
print(counterA(), counterA(), counterA(), counterA(), counterA()) # 1 2 3 4 5
File "main.py", line 6, in counter
i+=1
UnboundLocalError: local variable 'i' referenced before assignment
包括整數1也是對象,而且最重要的是Python中整形是不可變的,i和i+1指向的是兩塊不同的地址。在內函數中執行 i = i + 1 時,機器並不知道你是想創建一個局部變量i 呢還是想做賦值操作
而此處又不能使用global
去聲明爲全局變量,後來發現可以使用nonlocal
去聲明非本地非全局變量
可以參考這篇文章Python學習:關鍵字global和nonlocal的用法說明,感謝這位老哥的文章
其實除了使用nonlocal
去聲明解決以外 還可以使用list
去解決,因爲使用list
的時候是對這個可變數據類型進行修改並沒有聲明新的變量