from itertools import tee
def func():
g = (x for x in range(3, 100, 2)) # 生成器,产生奇数
while True:
n = next(g)
yield n
g = filter(lambda x: x % n > 0, g) # 筛选掉n的倍数
g1, g2 = tee(g, 2)
# 关键部分:对g1迭代,影响g和g2
for i in range(10):
next(g1)
g = g2 # g2 继承了被g1消耗后的状态
g = func()
print([next(g) for i in range(10)])
from itertools import tee
def func():
g = (x for x in range(3, 100, 2))
while True:
n = next(g)
yield n
g = filter(lambda x: x % n > 0, g)
g1, g2 = tee(g, 2)
g = g2 # 这里不再使用g1
# for i in range(10): # 去除这部分循环
# next(g1)
g = func()
print([next(g) for i in range(10)]) # 输出:[3, 5, 7, 11, 13, 17, 19, 23, 29, 31]