东方建 发表于 2022-3-8 15:58:12

一个python小疑惑


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

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

print(funX()())
print(funX()())
print(funX()())而这个输出的是 6,6,6。

这不是应该是一样的吗?不是很理解。

495175557 发表于 2022-3-8 15:58:28

首先a=funX()
a就是funX()运行结果funYd的函数地址,同时x=5运行了一次
而a()并不包括x=5重置的部分,因此每次x分别加了1

后面的因为运行的是每次的funX函数,然后再闭包,这里x都有重置为5

未来牌香烟 发表于 2022-3-8 15:58:35


a = funX() #实例化a,说明nonlocal x在内存中有了地址,每次执行都会+1
print(a())
print(a())
print(a())


print(funX()())#没实列化化, 第次调用都是原来的值
print(funX()())
print(funX()())


单看这里也不应该输出一样的吧。
页: [1]
查看完整版本: 一个python小疑惑