• python生成式和生成器


    一,生成式和生成器

    1,列表生成式

    mylist = [ i*i  for i in range(3) if i>1 ]
    print(mylist)
    
                        运行结果:[4]
    

      可以发现,快速生成列表的表达式,for循环range(3) ,如果i大于1,则乘以自己然后输出。

    2,生成器

    mygenerator = ( i*i for i in range(3))
    print(mygenerator)
                    运行结果:<generator object <genexpr> at 0x000001FB08F18BA0>
    

     可以发现,这个生成器和列表生成式非常相似。只是上面的是[] 而下面的是()。

    这让我想起了python2中的range与xrange2个函数。range是输出的是一个列表,而xrange生成的就是一个生成器。生成器需要是用for循环取值。

    生成器的好处就是可以不用一次性将值存放到内存中,用的时候再去调用,这样可以节省内存。

    二,yield(用于创建生成器)

    yield 和 return 非常相似, return只能返回一个值,而yield可以输出多个值。yield也可以理解为具有记忆功能的return。

    def fun1():
        for i in range(1,5):
             print(i)   
         
    
    def fun2():
        for i in range(1,5):
            return i 
    
    
    def fun3():
         for i in range(1,5):
            yield i 
    

      

    调用fun1()函数输出的是1,2,3,4,5

    调用fun2()函数输出是1(执行到return就退出函数了)

    调用fun3(0函数输出的是生成器,需要使用for循环取出来。

    fun3函数和fun2函数对比,fun2函数只会返回1然后退出函数,而yield会在下次进入函数的时候知道自己已经输出过上一次的值了,所以它会return下一个值。本质上是执行next()函数(python2版本)

    说明:yield创建的生成器是活的,再你使用for循环的时候是可以变更的。

  • 相关阅读:
    Docker 入门指南——Dockerfile 指令
    这个断点可以帮你检查布局约束
    个推你应该这样用的
    网易云直播SDK使用总结
    当微信和支付宝遇上友盟
    环信SDK 头像、昵称、表情自定义和群聊设置的实现 二(附源码)
    环信SDK 头像、昵称、表情自定义和群聊设置的实现 一(附源码)
    事件分发机制
    常用开发技巧系列(一)
    iOS RunTime你知道了总得用一下
  • 原文地址:https://www.cnblogs.com/lin1/p/8379697.html
Copyright © 2020-2023  润新知