如果想在 V2EX 获得更好的推广效果,欢迎了解 PRO 会员机制:
https://www.v2ex.com/pro/about

如果你经常使用铜币置顶主题,持有 V2EX Solana Token 会在每日签到时获得额外铜币:
https://www.v2ex.com/solana
fanqieipnet
V2EX  ›  推广

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

  •  
  •   fanqieipnet · Jan 4, 2021 · 1230 views
    This topic created in 1955 days ago, the information mentioned may be changed or developed.
    什么是生成器?如何创建生成器?今天番茄加速就来讲一下。

      生成器是可迭代的(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 replies    2021-01-04 20:19:49 +08:00
    julyclyde
        1
    julyclyde  
       Jan 4, 2021   ❤️ 1
    你这是推广??广告呢?
    hoyixi
        2
    hoyixi  
       Jan 4, 2021
    @julyclyde #1
    难道是第一行的那几个字
    julyclyde
        3
    julyclyde  
       Jan 4, 2021
    @hoyixi 多谢指点
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5894 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 127ms · UTC 02:00 · PVG 10:00 · LAX 19:00 · JFK 22:00
    ♥ Do have faith in what you're doing.