什么是生成器?如何创建生成器

2021-01-04 17:24:11 +08:00
 fanqieipnet
什么是生成器?如何创建生成器?今天番茄加速就来讲一下。

  生成器是可迭代的(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).

  生成器同样具备这些特性。
892 次点击
所在节点    推广
3 条回复
julyclyde
2021-01-04 19:59:50 +08:00
你这是推广??广告呢?
hoyixi
2021-01-04 20:09:17 +08:00
@julyclyde #1
难道是第一行的那几个字
julyclyde
2021-01-04 20:19:49 +08:00
@hoyixi 多谢指点

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/741596

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX