Python閉包局部變量問題

最近開始學習python,一直以爲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

這樣子就不會報錯了學習

相關文章
相關標籤/搜索