Python13--生成器

作者: 伊洛的小屋 | 来源:发表于2020-09-02 14:18 被阅读0次
    1.生成器
    • Generator是一个用于创建迭代器的简单而强大的工具。 它们的写法类似标准的函数
    • 生成器首先它是一个迭代器,和迭代器一样,生成器只能被遍历迭代一次,因为每次迭代的元素不是像列表元素一样,已经在内存中,每迭代一次,生成一个元素
    • 生成器和迭代器的主要区别在于:
      1、它们的创建方式不同
      2、生成器有一些特殊方法是迭代器不具有的
    2.创建生成器的两中方法
    (一)yield 编写生成器函数,函数的返回值就是生成器
    • yield 的使用方法和return 类似。不同的是,return可以返回有效的 Python 对象,而 yield返回的是一个生成器,函数碰到 return 就直接返回了,而使用了 yield的函数,到yield 返回一个元素,当再次迭代生成器时,会从 yield 后面继续执行,直到遇到下一个yield或者函数结束退出
    • 承接上文迭代器,还是用游戏中的英雄技能举例子
    #!/usr/bin/python
    
    def hero(*skills):
        print('英雄的释放技能分别如下')
        for release_skill in skills:
             yield release_skill
    
    
    skill = hero('一骑当千','单刀赴会','青龙偃月','刀锋铁骑')
    for s in skill:
        print(s)
    
    • hero函数中传入英雄的1-4技能
    • 来看一下运行结果
    # 微信搜索:伊洛的小屋
    # 个人主页:https://yiluotalk.com/
    (yiluo) ➜  Code python hero.py
    英雄的释放技能分别如下
    一骑当千
    单刀赴会
    青龙偃月
    刀锋铁骑
    
    • 这样使用比迭代器的好处是,生成器不会像迭代器放在内存中,是用户传入数值动态生成的
    (二)生成器表达式
    • 另一种创建生成器的方式就是通过表达式
    (yiluo) ➜  Code python3
    Python 3.7.5 (default, Nov 29 2019, 14:32:46)
    [Clang 9.0.0 (clang-900.0.39.2)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> s = (x+x for x in range(0,4))
    >>> s
    <generator object <genexpr> at 0x1058537d0>
    >>> for x in s:
    ...     print(x)
    ...
    0
    2
    4
    6
    
    • s 就是生成器,然后遍历查看结果
    • 迭代完一次之后再迭代这个生成器,它不会打印元素,也不会报错
    • 使用生成器有什么好处呢?因为生成器不是把所有元素存在内存,而是动态生成的,所以当你要迭代的对象有非常多的元素时,使用生成器能为你节约很多内存,这是一个内存友好的特性

    相关文章

      网友评论

        本文标题:Python13--生成器

        本文链接:https://www.haomeiwen.com/subject/sipisktx.html