麻烦了解发电机的简单例子

时间:2017-12-05 10:37:42

标签: python generator yield-keyword

我在几个地方找到了这些简单的例子:

# a generator that yields items instead of returning a list
def firstn(n):
    num = 0
    while num < n:
        yield num
        num += 1

sum_of_first_n = sum(firstn(1000000))

def get_primes(number):
    while True:
        if is_prime(number):
            yield number
        number += 1

def solve_number_10():
    total = 2
    for next_prime in get_primes(3):
        if next_prime < 1000:
            total += next_prime
        else:
            print(total)
        return

在第一个例子中,发电机自行耗尽,在第二个例子中它不会耗尽,但是for循环负责停止无限发电。 一个典型的解释是yield“返回”一个值,冻结函数状态,并且函数将在调用next()时从该状态继续。 这个解释有点误导吗?在任何一个例子中,我都不能“可视化”任何多次调用生成器函数的任何东西(next())。是不是更好地说yield返回一个生成器,这是一个只能迭代一次的可迭代对象?

编辑:生成器也不是可迭代对象:它动态生成可迭代对象,它“生成”(不是“返回”)只能迭代一次。这有点令人费解,直到我能够正确掌握它,就像许多其他概念一样:)谢谢。

0 个答案:

没有答案