鱼C论坛

 找回密码
 立即注册
查看: 1795|回复: 7

[已解决]闭包的几个问题2

[复制链接]
发表于 2017-8-10 20:51:32 | 显示全部楼层 |阅读模式

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

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

x
在程序里面经常会出现这类的循环语句,Python的问题就在于,当循环结束以后,循环体中的临时变量i不会销毁,而是继续存在于执行环境中。还有一个python的现象是,python的函数只有在执行时,才会去找函数体里的变量的值。

flist = []
for i in range(3):
        def foo(x): print x + i
        flist.append(foo)
for f in flist:
        f(2)

可能有些人认为这段代码的执行结果应该是2,3,4.但是实际的结果是4,4,4。这是因为当把函数加入flist列表里时,python还没有给i赋值,只有当执行时,再去找i的值是什么,这时在第一个for循环结束以后,i的值是2,所以以上代码的执行结果是4,4,4.



以上是网络上关于闭包解释的一段内容,有两个问题。第一个为什么最后输出结果是[4,4,4],第一遍循环结束以后 i 不是应该是 1 么?这样的话结果应该为[3,3,3],i 的值为何是 2
第二个问题是我复制到了idle当中,结果报错了这是为什么。
最佳答案
2017-8-10 22:16:42
2017-08-10_221500.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-10 22:16:42 | 显示全部楼层    本楼为最佳答案   
2017-08-10_221500.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-10 23:37:40 | 显示全部楼层

>>> flist = []
>>> for i in range(3):
        def foo(x):print x+i
       
SyntaxError: invalid syntax

编写到x+i就出错了亲
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-10 23:38:48 | 显示全部楼层
s1dney 发表于 2017-8-10 23:37
>>> flist = []
>>> for i in range(3):
        def foo(x):print x+i

重新打一遍,注意缩进
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-10 23:46:49 | 显示全部楼层
ba21 发表于 2017-8-10 23:38
重新打一遍,注意缩进

>>> flist = []
>>> for i in range(3):
                def foo(x):print x+i
       
SyntaxError: invalid syntax
>>>

复制过来有问题 锁进是有的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-10 23:47:42 | 显示全部楼层
ba21 发表于 2017-8-10 23:38
重新打一遍,注意缩进

x参数 变红了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-10 23:56:40 | 显示全部楼层

不是你的代码吗?3.0以上加()
  1. flist = []
  2. for i in range(3):
  3.         def foo(x): print(x + i)
  4.         flist.append(foo)
  5. for f in flist:
  6.         f(2)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-11 19:51:40 | 显示全部楼层
ba21 发表于 2017-8-10 23:56
不是你的代码吗?3.0以上加()

网上宕的 小白没有这种代码水平的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-1 11:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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