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

  • 时间:
  • 浏览:1
  • 来源:大发快3官方—UU快三

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

嗯~ 回到上一步. 你为哪几种太多再创建2个多迭代器呢?

译    文:PythonCaff作    者:Summer 

既然大伙机会知道了哪几种是迭代器,以及如可制作2个多迭代器,大伙接下来将继续来看看生成器。

当实例化后,迭代器未必会计算它每2个多项的值,大伙只会等你访问哪几种项的很久采取计算。这也假若众所周知的惰性求值。

下面的表达式还需要代替大伙后面 的生成器函数:

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

区别在于yield会保存函数的情况汇报。在函数下一次被调用时,机会从其抛妻弃子的地方继续执行,很久变量值也与它很久执行yield操作前相同。

这假若Python生成器的美妙之处。

让大伙来试一试:

生成器给Python引入了yield声明。它用起来一阵一阵像return,机会它会返回2个多值。

没法哪几种是迭代器呢, 你或许会问?

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

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

通过使用迭代器,大伙未必会在内存中创建2个多中含只是 素数的列表。相反,大伙机会在每次请求下2个多素数时才去生成它。

它允许应用应用程序猿变慢,更简单很久以2个多干净的最好的办法创建2个多迭代器.

现在大伙说太pythonic了!大伙还能再给力点吗?

机会把大伙的Primes迭代器转换为生成器,它看起来会像从前:

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

这共假若生成器的列表推导式。它用起来与列表推导式相同,不过表达式由()邮邮邮寄包裹而都是[]。

假设大伙太多再获得小于某个最大值的所有素数。

很久,大伙定义2个多迭代器类,中含__iter__ 和 __next__ 最好的办法。

大伙先定义2个多函数,它还需要检查2个多数字是是是否是是为素数:

回想下,生成器函数允许大伙以一种生活更简单的最好的办法来创建迭代器。

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

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

当大伙请求迭代器中的下2个多元素时,它会给number加1并检查这俩 数字是是是否是是为素数。机会都是,它会再次调用__next__直到number成为素数。一旦没法,迭代器就将这俩 数字返回。

自从 PEP 255引入生成器以来,它假若Python中重要的一偏离 .

 iterator 迭代器是2个多还需要被迭代的(循环)对象. 它还需要抽象为2个多装着数据同时有着可迭代对象的行为的容器.或许你机会每天在使用这俩 可迭代的对象: 诸如字符串,列表,字典或其它名字的对象.

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