想摸妹妹大腚 发表于 2020-4-30 21:47:01

一个有“闭包”的函数!

def funX():
    x = 5
    def funY():
      nonlocal x
      x += 1
      return x
    return funY

a = funX()
print(a())
print(a())
print(a())
为什么会打印 6 7 8呢?我想的应该是打印 6 6 6啊!
还是我全局变量和局部变量还没有搞明白吗?

zltzlt 发表于 2020-4-30 21:49:12

每次调用 funY,x 都会加 1

想摸妹妹大腚 发表于 2020-4-30 21:50:03

zltzlt 发表于 2020-4-30 21:49
每次调用 funY,x 都会加 1

能说的再详细些吗?我还是不懂

zltzlt 发表于 2020-4-30 21:51:29

想摸妹妹大腚 发表于 2020-4-30 21:50
能说的再详细些吗?我还是不懂

此时的 a 完全等于 funX 中的 funY,每次调用 a 就相当于调用 funY,x 的值会加 1 。

注意,这里只是单纯调用 funY,并不会重新调用 funX 。

想摸妹妹大腚 发表于 2020-4-30 21:53:35

zltzlt 发表于 2020-4-30 21:51
此时的 a 完全等于 funX 中的 funY,每次调用 a 就相当于调用 funY,x 的值会加 1 。

注意,这里只是 ...

熬谢谢懂了
页: [1]
查看完整版本: 一个有“闭包”的函数!