为什么这个生成器使用 for 循环而不是 next()?

Why does this generator work with a for loop but not with 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)。为什么?

您需要将生成器锁定到一个变量并 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))

就像已经说过的那样,您在每次迭代中都创建了生成器。您需要在每次迭代时对其进行迭代:

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

虽然 itertools.product 会为您做这些:

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