python - 为什么我的生成器总是返回相同的值?

标签 python generator python-3.4

我正在使用 python3 实现生成器的示例,但在使用 next() 时这不起作用:

def rgb():
    for r in range(256):
        for g in range(256):
            for b in range(256):
                yield r, g, b

for x in range(5):
    print(next(rgb()))

输出:

(0, 0, 0)
(0, 0, 0)
(0, 0, 0)
(0, 0, 0)
(0, 0, 0)

现在,如果我使用 for 作品:

def rgb():
    for r in range(256):
        for g in range(256):
            for b in range(256):
                yield r, g, b

for x in rgb():
    print(x)

最佳答案

在这种情况下,您似乎误用了 next() 函数,每次都会创建 rgb() 函数的新实例。试试这个:

def rgb():
    for r in range(256):
        for g in range(256):
            for b in range(256):
                yield r, g, b

it = rgb()
for x in range(5):
    print(next(it))

这会打印

(0, 0, 0)
(0, 0, 1)
(0, 0, 2)
(0, 0, 3)
(0, 0, 4)

正如预期的那样。

关于python - 为什么我的生成器总是返回相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31708002/

相关文章:

python - 通过计算集群加载python模块

python - Matplotlib:使用颜色图并对不同值使用不同标记

javascript - 将参数传递给生成器函数

c - libxml2 生成器(从 xsd 到 C 源代码)

python-3.4 - 如何使输入以大写形式显示

python - Google bigquery api 未列出历史作业

Python 和 Pandas : Re-indexing after selecing entries

python - 在生成器中使用 with 语句是否明智?

python - 从 python 脚本启动 MySQL

python - 嵌套 if 语句在列表列表中不返回任何内容