长衫罩子龙 发表于 2019-6-27 11:26:51

python一版20讲课后作业,关于闭包的问题

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

a = funX()
print(a())
print(a())
print(a())

请问这段代码里,为何x不会初始化为5啊?执行到a = funX()这部分时候内部是个什么状态呢?

‘当 a = funX() 的时候,只要 a 变量没有被重新赋值,funX() 就没有被释放,也就是说局部变量 x 就没有被重新初始化。’
小甲鱼的这句话不太理解。

风扫地 发表于 2019-6-27 11:47:57

本帖最后由 风扫地 于 2019-6-27 11:50 编辑



a = funX()# 执行完这一句 x==5了
print(a())# 执行完这一句 x==6了输出6(a未被释放,x将保留上一次计算的值
print(a())# 执行完这一句 x==7了 输出7
print(a())# 执行完这一句 x==8了 输出8.

没有重新初始化的意思,就是x=5这这句话没被重复执行。

长衫罩子龙 发表于 2019-6-28 09:33:30

风扫地 发表于 2019-6-27 11:47
a = funX()# 执行完这一句 x==5了
print(a())# 执行完这一句 x==6了输出6(a未被释放,x将保留上一 ...

哦,这样啊,谢谢啦

wanのcc 发表于 2021-3-28 12:48:53

funX赋给a了

然后print(a())相当于调用了funX里的funY

是这样吗?
页: [1]
查看完整版本: python一版20讲课后作业,关于闭包的问题