關於python的閉包的使用所會遇到的問題

題目:利用閉包返回一個計數器函數,每次調用它返回遞增整數
我一開始是這麼寫的

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的時候是對這個可變數據類型進行修改並沒有聲明新的變量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章