为什么要使用 Python 生成器?该如何使用 Python 生成器?

  • 时间:
  • 浏览:1
  • 来源:uu快3和值_uu快3app_计划师

迭代器只还需要被迭代一轮。然后你尝试再迭代primes一轮,它将不不返回任何值,表现得就像个空列表。

通过使用迭代器,亲戚亲戚亲们何必 会在内存中创建另3个 蕴藏什么都素数的列表。相反,亲戚亲戚亲们然后在每次请求下另3个 素数时才去生成它。

译    文:PythonCaff作    者:Summer 

嗯~ 回到上一步. 你为哪些地方你要创建另3个 迭代器呢?

另3个 迭代器是另3个 实现了迭代器接口 Iterator Protocol的类. 这些接口为类提供了另3个 最好的办法: __iter__ 和 __next__.

生成器给Python引入了yield声明。它用起来不得劲像return,然后它会返回另3个 值。

当亲戚亲戚亲们请求迭代器中的下另3个 元素时,它会给number加1并检查这些数字算是为素数。然后就有,它会再次调用__next__直到number成为素数。一旦如此,迭代器就将这些数字返回。

这然后Python生成器的美妙之处。

让亲戚亲戚亲们来试一试:

下面的表达式还需要代替亲戚亲戚亲们顶端的生成器函数:

亲戚亲戚亲们先定义另3个 函数,它还需要检查另3个 数字算是为素数:

回想下,生成器函数允许亲戚亲戚亲们以某种更简单的最好的办法来创建迭代器。

生成器允许你定义另3个 有迭代器行为的函数.

当然!亲戚亲戚亲们还需要使用 PEP 289中介绍的生成器表达式。

区别在于yield会保存函数的状态。在函数下一次被调用时,然后从其选择离开的地方继续执行,然后变量值也与它然后执行yield操作前相同。

假设亲戚亲戚亲们你要获得小于某个最大值的所有素数。

现在岂就有太pythonic了!亲戚亲戚亲们还能再给力点吗?

Primes 类通过给定另3个 最大值来实例化。然后下另3个 素数比最大值max需要大,迭代器就会抛出另3个 StopIteration异常来把迭代器停掉。

当你有另3个 非常大的数据集需要计算时,惰性求值是很有用处的。它允许你马上就能结速英语 使用数据,尽管整个数据集还在计算中。

如此哪些地方是迭代器呢, 你或许会问?

你也还需要来看看我的这篇文章 explanation ,看看我是何如使用Python在Medium上找到有趣的人并关注亲戚亲戚亲们的。

自从 PEP 255引入生成器以来,它然后Python中重要的一次要.

然后把亲戚亲戚亲们的Primes迭代器转换为生成器,它看起来会像然后:

这离米 是生成器的列表推导式。它用起来与列表推导式相同,不过表达式由()寄包囊 单而就有[]。

它允许线程运行猿更快,更简单然后以另3个 干净的最好的办法创建另3个 迭代器.

 iterator 迭代器是另3个 还需要被迭代的(循环)对象. 它还需要抽象为另3个 装着数据一起去有着可迭代对象的行为的容器.或许你然后每天在使用许多可迭代的对象: 诸如字符串,列表,字典或其它名字的对象.

既然亲戚亲戚亲们然后知道了哪些地方是迭代器,以及为社 制作另3个 迭代器,亲戚亲戚亲们接下来将继续来看看生成器。

对 Primes 对象的每一次迭代都调用了 __next__ 来生成下另3个 素数。

然后,亲戚亲戚亲们定义另3个 迭代器类,蕴藏__iter__ 和 __next__ 最好的办法。

当实例化后,迭代器何必 会计算它每另3个 项的值,亲戚亲戚亲们只会等你访问哪些地方地方项的然后采取计算。这也然后众所周知的惰性求值。