zoukankan      html  css  js  c++  java
  • python 生成器、生成器函数、推导式、生成器表达式

    一、生成器

       生成器的本质就是迭代器

       生成器的特点和迭代器一样,取值方式和迭代器一样。(__next__(),send():给上一个yield传值)

       生成器一般由生成器函数或者生成器表达是来创建

    二、生成器函数

       和普通函数没有区别。里面yield 的函数就是生成器函数

       生成器函数在执行的时候,默认不会执行函数体,返回生成器

       通过生成器的__next__() 分段执行这个函数

    def fun():
        print("aaaa")
        yield 1     #返回数据
        print("bbbb")
        yield 2
    gen = fun()  #拿到生成器
    gen.__next__()   #执行函数,执行到下一个yield
    gen.__next__()    #继续执行,执行到下一个yield
    

      send() 给上一个yield 传值,不能在开头(没有上一个yield),最后一个yield也不能用send()

    def eat():
        print("菜单")
        a = yield "馒头"
        print('a=',a)
        b = yield "鸡蛋灌饼"
        print('b=', b)
        c = yield "手抓饼"
        print('c=',c)
        yield 'end'
    gen =eat()
    ret1 = gen.__next__()
    print(ret1)
    ret2 = gen.send("胡辣汤")
    print(ret2)
    ret3 = gen.send("小米粥")
    print(ret3)
    ret4 = gen.send("豆腐脑")
    print(ret4)
    

      

    三、推导式

       1.列表推导式 [结果 for循环 条件筛选]

    lis = [i for i in range(10)]
    print(lis)
    

      

       2.字典推导式 [k:v for循环 条件筛选]

    di = {"1":"aaa","2":"bbb","3":"ccc"}
    dic = {j:i for i,j in di.items()}
    print(dic)
    

      

       3.集合推导式 {k for循环 条件}

    li = [2,3,5,3,1,8,9,4,5]
    se = {el for el in li}
    print(se)
    

      

    四、生成器表达式

       (结果 for循环 条件)

       特点:

        1.惰性机制

        2.只能向前

        3.节省内存

    def fun():
        print(111)
        yield 222
    g = fun()
    g1 = (i for i in g)
    g2 = (j for j in g1)
    print(list(g))   #111   [222]
    print(list(g1))  #[]
    print(list(g2))  #[]
    

      

  • 相关阅读:
    每天玩转3分钟 MyBatis-Plus
    每天玩转3分钟 MyBatis-Plus
    每天玩转3分钟 MyBatis-Plus
    git仓库管理
    【SpringCloud之pigx框架学习之路 】2.部署环境
    【SpringCloud之pigx框架学习之路 】1.基础环境安装
    Ubuntu 14.04 安装mysql
    Netflix是什么,与Spring Cloud有什么关系
    现学现用-我的第三个小小小私活
    申请微信小游戏账号
  • 原文地址:https://www.cnblogs.com/JinMuBaoBao/p/9469790.html
Copyright © 2011-2022 走看看