鱼C论坛

 找回密码
 立即注册
查看: 1943|回复: 8

[已解决]关于闭包的小问题

[复制链接]
发表于 2020-3-10 18:56:15 | 显示全部楼层 |阅读模式
5鱼币
如图,为什么在闭包内调用内部函数时,for循环会执行完呢?
最佳答案
2020-3-10 18:56:16
弱弱的佳佳 发表于 2020-3-12 13:54
那之前的结果不保存么?
>>> j = 0
>>> for i in range(10):
        j = i

        
>>> print(j)
9
按照你的理解,j应该是0,1,2,3,4,5,6,7,8,9

闭包

闭包

最佳答案

查看完整内容

按照你的理解,j应该是0,1,2,3,4,5,6,7,8,9
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-10 18:56:16 | 显示全部楼层    本楼为最佳答案   
弱弱的佳佳 发表于 2020-3-12 13:54
那之前的结果不保存么?
>>> j = 0
>>> for i in range(10):
        j = i

        
>>> print(j)
9
按照你的理解,j应该是0,1,2,3,4,5,6,7,8,9
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-10 21:04:36 | 显示全部楼层
为什么不会执行完呢?
def test():
    def test2():
        for i in range(10):
            print(i)
    return test2
如果按照你的理解,这行代码只会打印一次i
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-10 21:49:56 | 显示全部楼层
本帖最后由 wp231957 于 2020-3-10 21:57 编辑

很诡异的闭包  这应该是问题闭包函数,我怀疑它应该等同于下面代码:

无标题.png
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-12 12:19:55 | 显示全部楼层
很简单,你只是print()了i,但并没有进行返回。只需要要在test2的最后一行加上一个return i就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-12 12:20:28 | 显示全部楼层
陈尚涵 发表于 2020-3-12 12:19
很简单,你只是print()了i,但并没有进行返回。只需要要在test2的最后一行加上一个return i就行了

否则返回的是None
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-12 12:32:23 | 显示全部楼层
qiuyouzhi 发表于 2020-3-10 21:04
为什么不会执行完呢?

如果按照你的理解,这行代码只会打印一次i

for 循环时执行完了,但是应该有之前的那些数呀,比如你这个闭包,它执行会打印0至9,但是我那个为什么就只显示了最后打印的数,而之前的0,1,2,不显示,只显示了3且保留了下来?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-12 12:50:45 | 显示全部楼层
弱弱的佳佳 发表于 2020-3-12 12:32
for 循环时执行完了,但是应该有之前的那些数呀,比如你这个闭包,它执行会打印0至9,但是我那个为什么就 ...

for循环直接就跑完到最后一个结果了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-12 13:54:47 | 显示全部楼层
qiuyouzhi 发表于 2020-3-12 12:50
for循环直接就跑完到最后一个结果了

那之前的结果不保存么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 19:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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