首页 > 解决方案 > 在 Python 中何时使用生成器函数以及何时使用循环

问题描述

我来自 Matlab 背景,我发现很难绕过 Python 中生成器的概念。

有人可以回答我以下问题:

  1. 生成器函数和循环之间的区别
  2. 何时应实施

标签: pythonloopsiteratorgenerator

解决方案


生成器提供了一种“动态”创建元素的方法,而无需在我们开始遍历它们之前将它们全部保存在内存中。循环只是一种使生成器或另一个可迭代的方法,一次给我们一个元素。

例如:

for i in range(10):
    print(i)

for块是一个循环,range基本上是一个生成器。range在循环开始之前不会list从 1-10 创建一个,它只是创建生成器,即这些元素的创建者。您还可以想象range(1000000000000000000),它也不需要任何时间来创建(并且不会占用内存),因为在需要它们之前不会创建任何元素。

另一方面,我们的循环也可以从已经存在的对象中获取一个元素,例如list

for i in [0,1,2,3,4,5,6,7,8,9]:
    print(i)

将打印相同的结果,但列表是在循环开始之前创建并存储在其条目中的。这意味着在循环运行时,列表会占用内存空间和时间来创建。

这两个示例都是循环,但只有第一个使用了生成器。

这只是基础,但还有更多区别,例如可以引发的异常和可重用性、部分迭代等等。

有关差异的更多信息

编辑:@Vicrobot 说这range不是真正的生成器是正确的,但为了解释生成器的“懒惰”,这是我为简单起见而使用的


推荐阅读