首页 > 编程语言 > 详细

发现一个python generator生成器特殊例子,理解了好久

时间:2019-08-18 19:18:45      阅读:103      评论:0      收藏:0      [点我收藏+]
技术分享图片
def scq():
    for i in range(3):
        yield i
g = scq()
for n in [1, 10]:
    g = ((n+k) for k in g)
print(list(g))
View Code

开始代码是这样,光靠眼睛一看觉得结果肯定是[11,12,13]

但是代码一运行却发现结果并不是这样,而是[20,21,22]

这一下子我奇了怪了,为什么比预想的多出了就,后来各种尝试,甚至改了下面for循环的条件,发现只要不动列表的第二个数字,结果就不会发生变化。

后来开了debug一步一步运行,才发现如下原因如下

def scq():
for i in range(3):
yield i
g = scq()
# 第一个生成器 generator1
# 程序按顺序执行下来,在for循环时再次创建两个生成器,
for n in [1, 10]:       # n=1时创建了生成器 generator2,n=10时创建啊第三个生成器 generator3
g = ((n+k) for k in g)

print(list(g)) # 这里调用的是第三个生成器 n=10时创建的生成器 generator3
# 由于生成器的特性,只有被调用时才被执行,所以在这里调用时执行的是g3,而g3调用g2时n=10,g2再调用g

发现一个python generator生成器特殊例子,理解了好久

原文:https://www.cnblogs.com/wenmo/p/11372958.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!