python-3.x - 为什么这个生成器可以使用 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)
一遍。为什么?
解决方案
就像已经说过的那样,您每次迭代都在创建生成器。您需要在每次迭代时对其进行迭代:
gen = generador()
for _ in range(27):
print(next(gen))
虽然itertools.product
会为您做到这一点:
def generador():
yield from itertools.product(range(3), repeat=3)
推荐阅读
- android - 可以找到方法实现
- php - Laravel:如何获得收藏的钥匙?
- c# - 使用 LINQ throws 加入两个列表
- node.js - 恢复 Brain.js 神经网络模型的训练
- c# - 将自定义 URI 添加到现有 Windows 应用程序(本例中为 Excel)
- c# - 在代码中重用数据契约作为对象模型的推荐模式是什么?
- angular - 如何以正确的方式触发显示消息
- python - 在 Django 中,如何获取通过外键连接的子对象?
- sql-server - Microsoft SQL Server 2017 开发者下载错误问题
- php - 如何将活动类添加到第一个 foreach 项目?