为什么我的发电机总是返回相同的值?

问题描述 投票:1回答:1

我正在使用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)
python generator python-3.4
1个回答
3
投票

在这种情况下,您似乎错误地使用了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)

正如所料。

© www.soinside.com 2019 - 2024. All rights reserved.