为什么这个生成器使用 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)
我正在尝试制作一个生成器,为我提供 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)