Python閉包區域性變數問題

Jonithan發表於2019-02-16

最近開始學習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

這樣子就不會報錯了

相關文章