码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-08-18 17:16:41      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:spl   gen   python   执行   pytho   open   tor   为什么   调用   

技术图片
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生成器特殊例子,理解了好久

标签:spl   gen   python   执行   pytho   open   tor   为什么   调用   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!