首页 > 解决方案 > 为什么这个生成器可以使用 for 循环而不是 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)一遍。为什么?

标签: python-3.xgeneratoryieldnext

解决方案


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

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

虽然itertools.product会为您做到这一点:

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

推荐阅读