什么是生成器?如何创建生成器 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
如果想在 V2EX 获得更好的推广效果,欢迎了解 PRO 会员机制:
pro/about
fanqieipnet

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

  •  
  •   fanqieipnet 2021 年 1 月 4 日 1188 次点击
    这是一个创建于 1937 天前的主题,其中的信息可能已经有所发展或是发生改变。
    什么是生成器?如何创建生成器?今天番茄加速就来讲一下。

      生成器是可迭代的(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
    julyclyde
        1
    julyclyde  
       2021 年 1 月 4 日   1
    你这是推广??广告呢?
    hoyixi
        2
    hoyixi  
       2021 年 1 月 4 日
    @julyclyde #1
    难道是第一行的那几个字
    julyclyde
        3
    julyclyde  
       2021 年 1 月 4 日
    @hoyixi 多谢指点
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2788 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 13:05 PVG 21:05 LAX 06:05 JFK 09:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86