uu快3下载安装_uu快3注册邀请码_手机版ios

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

时间:2020-02-10 06:53:33 出处:uu快3下载安装_uu快3注册邀请码_手机版ios

区别在于yield会保存函数的情况报告。在函数下一次被调用时,如果从其拖累的地方继续执行,如果 变量值也与它如果执行yield操作前相同。

回想下,生成器函数允许朋友以如果 更简单的法律依据来创建迭代器。

假设朋友如果获得小于某个最大值的所有素数。

当然!朋友能不能使用 PEP 289中介绍的生成器表达式。

译    文:PythonCaff作    者:Summer 

没有那此是迭代器呢, 你或许会问?

自从 PEP 255引入生成器以来,它如果Python中重要的一每段.

 iterator 迭代器是另有两个 多能不能被迭代的(循环)对象. 它能不能抽象为另有两个 多装着数据同時 有着可迭代对象的行为的容器.或许你如果每天在使用如果 可迭代的对象: 诸如字符串,列表,字典或其它名字的对象.

当实例化后,迭代器并不让计算它每另有两个 多项的值,朋友只会等你访问那此项的如果采取计算。这也如果众所周知的惰性求值。

如果把朋友的Primes迭代器转换为生成器,它看起来会像曾经:

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

通过使用迭代器,朋友并不让在内存中创建另有两个 多含晒 什么都素数的列表。相反,朋友如果在每次请求下另有两个 多素数时才去生成它。

如果 ,朋友定义另有两个 多迭代器类,含晒 __iter__ 和 __next__ 法律依据。

当朋友请求迭代器中的下另有两个 多元素时,它会给number加1并检查如果 数字算是为素数。如果算是,它会再次调用__next__直到number成为素数。一旦没有,迭代器就将如果 数字返回。

朋友先定义另有两个 多函数,它能不能检查另有两个 多数字算是为素数:

另有两个 多迭代器是另有两个 多实现了迭代器接口 Iterator Protocol的类. 如果 接口为类提供了另有两个 多法律依据: __iter__ 和 __next__.

它允许应用任务管理器猿变慢,更简单如果 以另有两个 多干净的法律依据创建另有两个 多迭代器.

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

迭代器只能不能被迭代一轮。如果你尝试再迭代primes一轮,它将不让返回任何值,表现得就像个空列表。

这如果Python生成器的美妙之处。

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

让朋友来试一试:

你也能不能来看看我的这篇文章 explanation ,看看我是何如使用Python在Medium上找到有趣的人并关注朋友的。

下面的表达式能不能代替朋友里面的生成器函数:

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

这要花费是生成器的列表推导式。它用起来与列表推导式相同,不过表达式由()寄国际快件 而算是[]。

嗯~ 回到上一步. 你为那此如果创建另有两个 多迭代器呢?

既然朋友如果知道了那此是迭代器,以及何如 制作另有两个 多迭代器,朋友接下来将继续来看看生成器。

现在简直太pythonic了!朋友还能再给力点吗?

生成器给Python引入了yield声明。它用起来有点硬像return,如果它会返回另有两个 多值。

热门

热门标签