为什么这个itertools函数在另一个函数之外工作而在内部不工作



我正在尝试使用Python中的itertools产品来找到所有可能的组合。代码是有效的,但一旦我尝试生成结果而不是打印结果,它只会经过一个循环或重复,而忽略重复参数。

这项工作:

for i in range(1, 4):
g = itertools.product(range(5), repeat=i)
for j in range(len(al) ** i):
print(next(g))

这不是:

def func():
for i in range(1, 4):
g = itertools.product(range(5), repeat=i)
for j in range(len(al) ** i):
yield next(g)
for i in range(100):
print(next(func()))

我已经尝试过使用接下来的语句,并将itertools函数放在不同的位置。谷歌并不是很有帮助,因为所有的结果都只是非常基本的itertools教程。

如何使它在函数中工作?

我想你想要这个?

f = func()
for i in range(100):
print(next(f))

下次请提供mre:https://stackoverflow.com/help/minimal-reproducible-example

每次调用循环体时,都会创建一个新的生成器。这意味着您总是从第一个值开始。您希望创建一次生成器,然后对生成的所有值进行迭代。

不使用range类,只需直接迭代:

for value in func():
print(value)

谢谢大家!已经提供了两个很好的答案:

f = func()
for i in range(100):
print(next(f))
for value in func():
print(value)

最新更新