zoukankan      html  css  js  c++  java
  • 生成器

    一、生成器的定义

    在函数中使用yield关键字,由函数返回的结果就是生成器。

     1 def gen():
     2     print('gen')
     3     print('gen')
     4     yield 0
     5     print('gen')
     6     yield 1
     7     print('gen')
     8     yield 2
     9 g = gen()
    10 print(g)
    11 print(next(g))
    12 print(g.__next__())

    执行结果:

    <generator object gen at 0x106ccfcf0>
    gen
    gen
    0
    gen
    1

    从上面的例子可以看出,

    一、生成器是迭代器,next(g),g.__next__()取值照样可用。

    二、yield关键字的作用可以保留生成器的状态。

    三、从第二次迭代开始,每一次迭代会从上一次迭代返回结果的位置开始往下执行代码,遇到yield后返回迭代结果并保留生成器状态再退出。

    二、使用生成器有什么好处

    用例子来说明一下,

    第一种情况:假设需要生成一百万个数据,我们可以通过循环来生成一百万个数据,然后存放于集合中。那么这个集合所占用的内存空间就非常大了。这种情况会一下子让程序崩溃。而且没办法做到获取数据的时效性,等到一百万个数据生成完毕,才可以取出数据。

    第二种情况:假设同样生成一百万个数据,我们使用生成器来生成,我们已经明白生成器的定义和使用,生成器在使用的过程中,当需要迭代数据时,生成器就帮我们取出结果数据,每次迭代每次取出一个结果数据存放到变量中,变量使用过后,系统可以自动回收,可以很好地节省内存开支。并且可以做到获取数据的时效性。

    在本人看来,使用生成器在程序需要处理或者生成大量数据时,可以极大地节省内存空间,在性能上有所保证,基于这点好处使用生成器才真正发挥它的强大作用。

  • 相关阅读:
    FastAdmin 提示框 toastr 改变文字
    FastAdmin 将会员模块升级为基础模块的升级指导
    随笔
    随笔
    c++11 lambda(了解)
    c++11 类型推断
    boost::archive::text_oarchive
    std::ostringstream
    随笔
    随笔1
  • 原文地址:https://www.cnblogs.com/lvqiuji/p/9539290.html
Copyright © 2011-2022 走看看