开发者社区> 问答> 正文

python生成器问题

如下代码: def add(a, b): return a + b

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

g = test()

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

print(list(g))

看解释是这样说的: for n in [2, 10]: # 循环内只是定义了两次生成器, 并不会去执行他 # 等待调用的时候再去执行 # 调用的时候执行, 会去寻找变量n # n已经被for循环到最后一个, n==10

# 第一次循环不会调用g, 只是定义了一个g生成器
# 第二次循环才会调用g

# 等调用g的时候, n已经循环两次=10
# 第一次调用g, g里面是0, 1, 2, 3(test函数产生)
# 第二次调用g, g里面是10+0, 10+1, 10+2, 10+3, 10+4
g = (add(n, i) for i in g)
print(list(g))

针对上面解释,说调用g的时候,n已经循环两次=10,为什么是这样???难道调用的时候不应该先是g=(add(2,i) for i in range(4)),得到生成器(2,3,4,5),然后再是g=(add(10,i) for i in (2,3,4,5)),得到g=(12,13,14,15),最后print(list(g))的时候得到[12,13,14,15]吗? 有没有大神帮忙解释下,非常感谢!

展开
收起
游客32aabrwgcbwri 2019-10-28 17:34:47 513 0
1 条回答
写回答
取消 提交回答
  • yield关键字,解释器执行到时,先终断执行返回,下次接着执行yield之后。 了解一下yield机制。

    2019-10-30 15:22:55
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载