找回密码
 立即注册
查看: 17693|回复: 2

[已经解决] 一个python小疑惑

[复制链接]

新手上路

积分
3
发表于 2022-3-8 15:58:12 | 显示全部楼层 |阅读模式
为什么这个输出 6,7,8

而这个输出的是 6,6,6。

这不是应该是一样的吗?不是很理解。
已获得悬赏 10 C币

最佳答案

首先a=funX() a就是funX()运行结果funYd的函数地址,同时x=5运行了一次 而a()并不包括x=5重置的部分,因此每次x分别加了1 后面的因为运行的是每次的funX函数,然后再闭包,这里x都有重置为5 ...

本帖寻求最佳方案

 1970-1-1 08:00发表回复被东方建采纳,幸运的获得奖励 C币 5

 详细答案»

回复

使用道具 举报

新手上路

积分
12
发表于 2022-3-8 15:58:28 | 显示全部楼层
首先a=funX()
a就是funX()运行结果funYd的函数地址,同时x=5运行了一次
而a()并不包括x=5重置的部分,因此每次x分别加了1

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

使用道具 举报

新手上路

积分
2
发表于 2022-3-8 15:58:35 | 显示全部楼层

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


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


单看这里也不应该输出一样的吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2025-9-14 07:03 , Processed in 0.017696 second(s), 25 queries .

© 2001-2020

快速回复 返回顶部 返回列表