鱼C论坛

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

菜鸟求助

[复制链接]
发表于 2016-7-14 10:08:56 | 显示全部楼层 |阅读模式
5鱼币
first=[]
for i in range(3):
        def foo(x): print(x+i)
        first.append(foo)
for f in first:
        f(2)

这段代码的结果是:4 4 4,想请教一下这是为什么?程序运行的顺序是什么呢?为什么X没有赋值也能运行出来结果?求大神帮忙解答一下

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-7-14 10:49:55 | 显示全部楼层
本帖最后由 SixPy 于 2016-7-14 10:57 编辑

规范的写法
  1. def foo(x):
  2.     print(x+i)
  3.    
  4. first=[]
  5. for i in range(3):
  6.     first.append(foo)
  7.    
  8. for f in first:
  9.     f(2)
复制代码


变量 i 在 第一个for 中定义了
        x 在 foo函数中以形参的方式定义

第一个 for 循环把 foo 函数对象添加到 first 列表中 3次
i 在for循环结束后,值是 2

第二个 for循环 依次把 各个 foo函数执行,x 是 2  

x + i = 2+2=4

你用
print(first)

就知道 first 里装的什么东西了


评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
liyuanjun + 5 + 5 + 3 感谢

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-7-14 13:24:47 | 显示全部楼层
非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-14 18:52:59 | 显示全部楼层
first[]列表里放了3次foo函数的对象,所以是4,4,4
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-18 16:52:16 | 显示全部楼层
有收获
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-21 20:10:10 | 显示全部楼层
正解,学习了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-10-6 23:57:33 | 显示全部楼层
都回答完了,还不给分,太吝啬了吧,提问的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-23 08:47:17 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-21 17:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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