编程语言
首页 > 编程语言> > 发现一个python generator生成器特殊例子,理解了好久

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

作者:互联网

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

标签:10,调用,g3,generator,python,创建,生成器,scq
来源: https://www.cnblogs.com/wenmo/p/11372958.html