鱼C论坛

 找回密码
 立即注册
查看: 1740|回复: 5

请问 这里的 没有被释放是什么意思

[复制链接]
发表于 2021-5-15 21:26:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
6. 以下是“闭包”的一个例子,请你目测下会打印什么内容?
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

有些鱼油可能会比较疑惑,这……怎么跟全局变量一样了?局部变量 x 不是应该在每次调用的时候都重新初始化了吗?!
其实大家仔细看看就明白了,当 a = funX() 的时候,只要 a 变量没有被重新赋值,funX() 就没有被释放,也就是说局部变量 x 就没有被重新初始化。
所以当全局变量不适用的时候,可以考虑使用闭包更稳定和安全
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-15 21:29:04 | 显示全部楼层
本帖最后由 柿子饼同学 于 2021-5-15 21:31 编辑

释放就是释放内存的意思, 只要a 继续打印下去,x就会一直自增
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-15 21:51:17 | 显示全部楼层
柿子饼同学 发表于 2021-5-15 21:29
释放就是释放内存的意思, 只要a 继续打印下去,x就会一直自增

谢谢您的回复 但是我有疑问
a被定义为funX()函数
每次启用funX()的话 都会执行 x =5 的命令不是吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-16 03:59:44 | 显示全部楼层
水滴石穿007 发表于 2021-5-15 21:51
谢谢您的回复 但是我有疑问
a被定义为funX()函数
每次启用funX()的话 都会执行 x =5 的命令不是吗

funX()返回的是funY
a是funY的引用,a()等效于funY()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-16 05:59:50 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-16 06:00:42 | 显示全部楼层
fish_游鱼 发表于 2021-5-16 03:59
funX()返回的是funY
a是funY的引用,a()等效于funY()

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 20:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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