最近開始學習python,一直覺得python定義變數前沒有命令很難受,果然今天在練習閉包時遇到了這個問題。先看看出問題的程式碼
def createCounter():
n = 0
def counter():
n = n + 1
return n
return counter
這裡會報錯:UnboundLocalError: local variable `n` referenced before assignment
原因:n = n + 1
這行程式碼導致的歧義
- 理解為
新定義的變數n
,並且n = n + 1
,由於之前n未被定義,所以會報錯
解決方法:用global命令或者nonlocal命令
- 我喜歡用nonlocal命令,因為global命令會導致全域性變數臃腫,修改後程式碼如下
def createCounter():
n = 0
def counter():
nonlocal n
n = n+1
return n
return counter
這樣子就不會報錯了