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

问题描述 投票:0回答:2

我正在尝试生成一个可以给我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)。为什么?

python-3.x generator yield next
2个回答
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))

1
投票

据说您是在每次迭代中创建生成器。您需要在每次迭代中对其进行迭代:

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

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

def generador():
    yield from itertools.product(range(3), repeat=3)
© www.soinside.com 2019 - 2024. All rights reserved.