python特殊的声明非局部变量的写法,求解释!

在闭包函数中,一般使用nonlocal声明非局部变量,例如:

def func1():
    num=0
    def iner():
        nonlocal num
        num+=1
        return num
    return iner
        
res1=func1()
print([res1(),res1(),res1(),res1()])#输出[1,2,3,4]

但今天看到一种另外的写法,可以实现同样的效果:

def func2():
    func2.num=0
    def iner():
        func2.num+=1
        return func2.num
    return iner 

res2=func2()
print([res2(),res2(),res2(),res2()]) #输出[1,2,3,4]
 

像这样,与定义类属性相似的方式,却使用函数名来声明非局部变量的方式,有点不懂....
有没有大神可以解释下?

阅读 1.8k
1 个回答

一句话,万物皆对象,函数也如此。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题