一个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。
这不是应该是一样的吗?不是很理解。
首先a=funX()
a就是funX()运行结果funYd的函数地址,同时x=5运行了一次
而a()并不包括x=5重置的部分,因此每次x分别加了1
后面的因为运行的是每次的funX函数,然后再闭包,这里x都有重置为5
a = funX() #实例化a,说明nonlocal x在内存中有了地址,每次执行都会+1
print(a())
print(a())
print(a())
print(funX()())#没实列化化, 第次调用都是原来的值
print(funX()())
print(funX()())
单看这里也不应该输出一样的吧。
页:
[1]