这是一个创建于 1422 天前的主题,其中的信息可能已经有所发展或是发生改变。
什么是生成器?如何创建生成器?今天番茄加速就来讲一下。
生成器是可迭代的(Iterable),最简单的创建生成器方法是通过一对(),如下所示:
In [37]: g = (i*i for i in [1,4,0])
In [38]: g
Out[38]: at 0x7fe8956e96d0>
g 是一个生成器对象,generator object
获取生成器对象的元素,可使用 next 函数,如下所示,获取第一个元素:
In [39]: next(g)
Out[39]: 1
获取第二个元素:
In [40]: next(g)
Out[40]: 16
创建生成器的几种方法?
如上所见,使用一对()能够创建一个生成器对象。
除此之外,想必大家也都知道,是使用关键字 yield. yield 出现在一个函数中,运行到 yield 处,返回的对象便是生成器对象(generator object).
生成器是迭代器吗?
生成器对象(generator object)一定也是迭代器对象(Iterator object),如上面的生成器 g,使用内置函数 isinstance 验证,返回 True:
In [43]: isinstance(g,Iterator)
Out[43]: True
因此,它具备一切迭代器的特性,关于迭代器我们已在上一个话题讨论,简而言之,迭代器的几个特点:
是有去无回的,
迭代器无需提前知道整个列表的所有元素,
无需加载所有元素到 RAM 中尽而它是节省内存的(memory-efficient).
生成器同样具备这些特性。
3 条回复 • 2021-01-04 20:19:49 +08:00
|
|
1
julyclyde 2021-01-04 19:59:50 +08:00 1
你这是推广??广告呢?
|
|
|
2
hoyixi 2021-01-04 20:09:17 +08:00
|