python-3.x 为什么这个生成器可以使用for循环而不能使用next()?

3z6pesqy  于 2023-05-23  发布在  Python
关注(0)|答案(2)|浏览(173)

我试图使一个发电机,给我的排列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)。为什么?

kmbjn2e3

kmbjn2e31#

就像已经说过的,你在每次迭代中创建生成器。你需要在每次迭代中遍历它:

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

虽然itertools.product会为您做这件事:

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

li9yvcax2#

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

相关问题