448011546
022-19547785
导航

弄懂这 6 个问题 拿下 Python 生成器!

发布日期:2022-02-21 00:23

本文摘要:来自民众号: Python与算法社区 来自民众号: Python与算法社区 fori inmylist: print(g) 无需加载所有元素到RAM中尽而它是节约内存的(memory-efficient). 是有去无回的 效果: fori inmylist: 参考录制的gif: 2 什么是一个生成器?

亚慱体育官网首页

来自民众号: Python与算法社区

来自民众号: Python与算法社区

fori inmylist:

print(g)

无需加载所有元素到RAM中尽而它是节约内存的(memory-efficient).

是有去无回的

效果:

fori inmylist:

参考录制的gif:

2 什么是一个生成器?

print(i*i)

除此之外想必大家也都知道是使用关键字 yield . yield 泛起在一个函数中运行到 yield 处返回的工具即是生成器工具(generator object).

yieldround(i, 3)

然后for循环再进入函数时直接跑到 yield 的下一句。直到生成器工具变空为止。

deffrange(start,end,step):

带 yield 的函数和 for 联合使用第一次挪用上一步建立的生成器工具后将会进入函数体直到遇到 yield 返回值。

因此它具备一切迭代器的特性关于迭代器我们已在上一个话题讨论简而言之迭代器的几个特点:

Out[ 40]: 16

pass

8 yield 和 itertools

迭代器无需提前知道整个列表的所有元素

为了加深印象你可以自己调试验证一遍函数第一行打的断点始终未被掷中。

yield 关键字的用法在stackoverflow上也是最热的问题之一借用一个最热回覆中的解释:

yield is a keyword that is used like return, except the function will return a generator.

4 生成器是迭代器吗?

生成器工具(generator object)一定也是迭代器工具(Iterator object)如上面的生成器 g 使用内置函数 isinstance 验证返回 True :

mylist = range( 3)

foritem infrange( 10, 14, 0.8):

defgfun:

yield重要性和使用广泛性还提现在Python单唯一个模块专门用于治理迭代器和生成器工具即是 itertools 内里封装的方法特性后面再讨论。

In [ 38]: g

亚慱体育app官方下载

In [ 39]: next(g)

yield重要性和使用广泛性还提现在Python单唯一个模块专门用于治理迭代器和生成器工具即是 itertools 内里封装的方法特性后面再讨论。

In [ 38]: g

In [ 39]: next(g)

Python引入yield后便拥有具备实现协程的能力协程简直是一种高效的编程模型关于协程的明白后面专题会详细讨论。

包罗更高级的功效如异步等基本都是 yield .

是有去无回的

7 yield 都有哪些重要价值?

说实话明白这些只是皮毛。那么如何醒目yield的用法呢?

最后总结今天讨论的几个问题:

说实话明白这些只是皮毛。那么如何醒目yield的用法呢?

最后总结今天讨论的几个问题:

In [ 33]: fromcollections.abc importIterable,Iterator

yieldi*i

当你挪用带有yield的函数时函数并没有执行任何一行只是返回一个生成器工具

3 建立生成器的几种方法?

使用下面代码演示 yield 的上面历程:

Out[ 38]: <generator object <genexpr> at 0x7fe8956e96d0>

Out[ 34]: True

挪用 frange :

5 如何用一句话形貌 yield?

yield is a keyword that is used like return, except the function will return a generator.

生成器同样具备这些特性。

除此之外它另有一些独占的特性下面追随 yield 我们便能看出来。

10.8

今天先容生成器和yield的用法通过如下8、9个小问题相信大家会对它们有一点新的认识。

g = gfun

g 是一个生成器工具 generator object

defcreateGenerator:

迭代器无需提前知道整个列表的所有元素

挪用 frange :

5 如何用一句话形貌 yield?

yield is a keyword that is used like return, except the function will return a generator.

Out[ 39]: 1

获取第二个元素:

10.8

亚慱体育app官方下载

forgi ing:

whilei<end:

1 什么是可迭代工具?

print(g)

10

13.2

可迭代工具英文Iterable是一个形容词这类工具和Java语言类似都可看作是一类接口抽象地形貌事物具备怎样的能力。

所以Iterable自然具备可迭代能力。

6 如何醒目yield的用法?

12.4

i = start

生成器是可迭代的( Iterable )最简朴的建立生成器方法是通过一对 如下所示:

如下常见的listIterator等都是Iterable工具:

Out[ 43]: True

9 yield 使用案例

In [ 37]: g = (i*i fori in[ 1, 4, 0])

In [ 34]: issubclass(list,Iterable)

如上所见使用一对 能够建立一个生成器工具。

yield 是一个特殊的return, 它返回一个生成器工具。

yield实现浮点数步长的 frange :

为了资助大家明白建立一个带有yield的函数:

i+=step

print(item)

mylist = range( 3)

1 什么是可迭代工具? 2 什么是一个生成器? 3 建立生成器的几种方法? 4 生成器是迭代器吗? 5 如何用一句话形貌 yield? 6 如何醒目yield的用法? 7 yield 都有哪些重要价值? 8 yield 和 itertools 9 yield 使用案例。


本文关键词:亚慱体育app官方下载,弄懂,这,个,问题,拿下,Python,生,成器,来自

本文来源:亚慱体育app在线下载-www.sxxhty.com