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

时间:2015-07-29 18:08:12

标签: 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)

1 个答案:

答案 0 :(得分: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)

正如所料。