简单的Python生成器在for循环中跳过步骤

3

尝试理解生成器,我写道:

def counter():
    n = 1
    while n <= 10:
        yield n
        n += 1

如果我手动输入,则需按以下步骤进行操作:
c = counter()

...接连不断地跟随着

print c.next()

我理解 1、2、3 等内容。但如果运行

for i in c:
    print c.next()

我得到了2、4、6、8...,我已经盯着它看了太久。请问我错过了什么?


2
如果您同时使用 for ... in.next(),则每个步骤都会迭代两次 - 使用其中之一即可。 - jonrsharpe
2个回答

3

.next() 迭代刚刚创建的生成器,就像你平常做的一样。

for i in c 

这就是为什么您在第二种方法中只有偶数的原因。
只需输入:
for i in c:
    print i

1
for i in c:
    print c.next()

实质上和

c_iter = iter(c)
while True:
    try:
        i = c_iter.next()
    except StopIteration:
        break
    print c_iter.next()

你的 for 循环从生成器中获取了一个值,然后忽略它并获取另一个值以进行打印。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接