为什么此生成器与for循环一起使用,而不与next()一起使用?

时间:2019-11-15 23:22:14

标签: python-3.x generator yield next

我正在尝试制作一个可以给我3个数字排列的生成器

def generador():
    for i in range(3):
        for j in range(3):
            for k in range(3):
                yield i,j,k

使用for循环for a,b,c in generador():可以正常工作,但是:

for _ in range(27):
    print(next(generador()))

只需再次打印(0,0,0)。为什么?

2 个答案:

答案 0 :(得分:2)

就像您曾经说过的,您要在每次迭代中创建生成器。您需要在每次迭代中对其进行迭代:

gen = generador()
for _ in range(27):
    print(next(gen))

尽管itertools.product会为您做到这一点:

def generador():
    yield from itertools.product(range(3), repeat=3)

答案 1 :(得分:1)

您需要将生成器锁存到一个变量中,然后next才能通过该实例,这样您就可以通过同一实例,否则每个循环都要经过一个新实例,因此得到0,0,0

def generador():
    for i in range(3):
        for j in range(3):
            for k in range(3):
                yield i,j,k
a = generador()
for _ in range(27):
    print(next(a))