您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

您可以使用Python生成器函数做什么?

您可以使用Python生成器函数做什么?

生成器为您提供懒惰的评估。您可以通过遍历它们来使用它们,可以显式地使用“ for”,也可以隐式地将其传递给任何迭代的函数或构造。您可以将生成器视为返回多个项目,就像它们返回一个列表一样,但是与其一次一次返回它们而不是一次全部返回它们,而是将生成功能暂停直到请求下一个项目。

生成器非常适合计算大量结果(特别是涉及循环本身的计算),在这些情况下您不知道是否需要所有结果,或者不想在同一时间为所有结果分配内存。或者对于生成器使用另一生成器或消耗某些其他资源的情况,如果这种情况发生得越晚越方便。

生成器的另一个用途(实际上是相同的)是将迭代替换为迭代。在某些情况下,您希望某个函数执行大量工作,并偶尔向呼叫者报告。传统上,您将为此使用回调函数。您将此回调传递给工作函数,它将定期调用此回调。生成方法是工作函数(现在是生成器)对回调一无所知,仅在需要报告某些内容时才产生。调用者没有编写单独的回调并将其传递给工作函数,而是在生成器周围的一个“ for”循环中完成所有报告工作。

例如,假设您编写了一个文件系统搜索”程序。您可以完整地执行搜索,收集结果,然后一次显示一个。在显示一个结果之前,必须先收集所有结果,并且所有结果将同时存储在内存中。或者,您可以在找到结果时显示结果,这样可以提高内存效率,并且对用户友好得多。后者可以通过将结果打印功能传递给文件系统搜索功能来完成,也可以仅通过使搜索功能生成器并遍历结果来完成。

如果要查看后两种方法的示例,请参见os.path.walk()(带有回调的旧文件系统行走功能)和os.walk()(新的文件系统行走生成器。)当然,如果您确实想将所有结果收集到列表中,生成方法可以轻松转换为大列表方法

big_list = list(the_generator)
python 2022/1/1 18:44:21 有306人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶