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

这样子就不会报错了学习

相关文章
相关标签/搜索