发现一个python generator生成器特殊例子,理解了好久
Posted wenmo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了发现一个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))
开始代码是这样,光靠眼睛一看觉得结果肯定是[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生成器特殊例子,理解了好久的主要内容,如果未能解决你的问题,请参考以下文章