如下代码: 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]吗? 有没有大神帮忙解释下,非常感谢!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。