def outer():
x=5
def inner():
nonlocal x
x+=1
print(x)
return inner
#第一部分
a=outer()
print(a)
print(a())
print(a)
print(a())
a=outer
print(a)
print(a()())
print(a)
print(a()())
a()()
与
b=a()
b()
并不等价
a()()
是先调用a()一次,返回一个inner,然后再调用inner
第一部分只调用了outer()函数一次,只产生了一个闭包,只有一个x变量和一个子函数。
a是从这个闭包中返回的子函数。
print(a())
print(a())
这样两次调用的是同一个闭包中的子函数,两次访问的是同一个闭包中的x变量。
同一个x变量 x+=1了两次,自然第一次输出6,第二次输出7
第二部分
a等于outera函数。
outera()函数(a()函数)每次调用都会产生一个新的闭包。每个闭包中都有一个x变量和一个子函数。
print(a()())
print(a()())
这样是调用了a()函数两次。产生两个新的闭包,两个闭包中的x变量都是独立的,
之后的()是调用不同闭包中的子函数,访问的是各自闭包中的x变量。
两个闭包中的x变量初始都是5,各自x+=1之后就都是6。
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!