首页 > 解决方案 > 多次调用后更改内部函数中的非局部变量的结果

问题描述

我在 python 中搞乱以掌握使用内部函数、闭包之类的东西,我遇到了在我看来很奇怪的行为。

当我尝试在内部函数中更改外部函数变量的值时,我希望要么跟踪后续调用闭包所做的更改,要么根本没有更改。

def a():
  x = 0
  def b():
    nonlocal x 
    print(x)
    x =+ 1
  return b

c = a() 
c()
c()
c()
c()
c()

在我的情况下,如果我可以修改变量并且更改是否持续存在,我期望从每次调用中获得 1、2、3、4、5 或仅 0。

但是当我运行代码时,我得到了:

0
1
1
1
1

而且我无法弄清楚它为什么会改变,但只有一次。任何人都可以解释一下吗?

标签: pythonpython-3.xclosures

解决方案


你有+错误的地方

x =+ 1

方法

x = +1
x =  1

不是

x += 1

所以你不添加1x但你总是设置1


推荐阅读