鱼C论坛

 找回密码
 立即注册
查看: 2747|回复: 6

这个函数返回结果,看的有点蒙蔽了,求大神解释

[复制链接]
发表于 2017-4-14 09:49:47 | 显示全部楼层 |阅读模式

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

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

x
def add(n,i):
    return n+i

def test():
    for i in range(4):
        yield i

g=test()
for n in [1,10]:
    g=(add(n,i) for i in g)

print(list(g))
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-4-14 09:53:19 | 显示全部楼层
其实大约能想通了,但是想大神门帮梳理一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-14 11:30:40 | 显示全部楼层
最后生成的代码相当于
g=(add(n,i) for i in ( add(n,i) for i in test() ))
然后n = 10
所以 g=(add(10,i) for i in ( add(10,i) for i in test() ))
10+10+0,10+10+1,10+10+2,10+10+3

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
奔跑的小鱼 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-4-14 16:08:22 | 显示全部楼层
我其实不太理解为什么迭代结果不是
g=(add(10,i) for i in ( add(1,i) for i in test() )),为什么n=1的时候未将值代入,而是最后一次才起效
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-15 16:51:34 | 显示全部楼层
Krant5 发表于 2017-4-14 16:08
我其实不太理解为什么迭代结果不是
g=(add(10,i) for i in ( add(1,i) for i in test() )),为什么n=1的时 ...

g=(add(10,i) for i in ( add(10,i) for i in test() ))这个是最终的生成器推导式
list(g)运行这个推导式,运行推导式的时候n为10呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-15 17:22:19 | 显示全部楼层
zlj19931010 发表于 2017-4-15 16:51
g=(add(10,i) for i in ( add(10,i) for i in test() ))这个是最终的生成器推导式
list(g)运行这个推导 ...

我以为过程是这样的 n=1时 g=(add(1,i) for i in test())  ----->as g1
                               n=10时 g=(add(10,i) for i in g1)  也就是
                               g=(add(10,i) for i in ( add(1,,i) for i in test() ))
否则的话,n=1 时候生成器推倒式有何意义?

但是事实确实是 最后一次才将n=10代入,n=1并没有生效
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-15 21:54:55 | 显示全部楼层
本帖最后由 zlj19931010 于 2017-4-15 22:40 编辑
Krant5 发表于 2017-4-15 17:22
我以为过程是这样的 n=1时 g=(add(1,i) for i in test())  ----->as g1
                               ...


哈哈,这类题目本来就是来刁钻学习者的,这样才会自己去调试,自己找答案

我本来也不知道,后来调式的时候发现的

生成器推导式 返回一个迭代器,这个迭代器里面引用了变量n,当然这个时候迭代器没有执行

所以等到这个迭代器执行的时候,也就是list(g)的时候,就会去找这个时候n的值了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-11 23:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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