我开始学习Python,我遇到过生成器函数,其中有yield语句。我想知道这些函数最擅长解决什么类型的问题。


当前回答

这里有一些很好的答案,但是,我也推荐完整阅读Python函数式编程教程,它有助于解释生成器的一些更有效的用例。

特别有趣的是,现在可以从生成器函数外部更新yield变量,因此可以用相对较少的工作创建动态和交织的协程。 更多信息请参见PEP 342:通过增强型生成器的协程。

其他回答

基本上避免回调函数时迭代输入维护状态。

请参阅这里和这里,了解使用生成器可以做什么。

也适用于打印到n的质数:

def genprime(n=10):
    for num in range(3, n+1):
        for factor in range(2, num):
            if num%factor == 0:
                break
        else:
            yield(num)

for prime_num in genprime(100):
    print(prime_num)

这里有一些很好的答案,但是,我也推荐完整阅读Python函数式编程教程,它有助于解释生成器的一些更有效的用例。

特别有趣的是,现在可以从生成器函数外部更新yield变量,因此可以用相对较少的工作创建动态和交织的协程。 更多信息请参见PEP 342:通过增强型生成器的协程。

当我们的web服务器充当代理时,我使用生成器:

客户端从服务器请求一个代理url 服务器开始加载目标url 服务器在获得结果后立即将结果返回给客户机

请参阅PEP 255中的“动机”部分。

生成器的一个不太明显的用途是创建可中断函数,它允许您在不使用线程的情况下“同时”执行更新UI或运行多个作业(实际上是交错的)。