zoukankan      html  css  js  c++  java
  • 生成器,生成器表达式,三元表达式

    1,什么是生成器?

    只要函数内部包含yield关键字,那么函数名()得到的结果就是生成器,而且不会执行函数内部代码

    def func():
      print('============first')
      yield 1

      print('second)

      yield 2

      print(third)

      yield3

      print('end')

    g=func()

    print(g)

    2  ,生成器就是迭代器

    g.__iter__

    g.__next__

    生成器就是迭代器,因此可以这么取值

    res=next(g)

    print(res)

    3,携程函数   yield

    yield 关键字的另外一种使用形势:表达式形式的yield

    def eater(name):
      print('%s 准备开始吃饭啦'%name)

      foo_list=[]
      while  True:

        food=yield food_list

        print('%s吃了%s'%(name,food_list)

        food_list.append(food)

    g=eater('egon')

    g.send(None)#对于表达式形式的yield,在使用时,第一次必须传None,g.send(None)等同于next(g)

    g.send('真颅骨')

    g.send('蒸熊掌')

    yield 总结

    1,把函数做成迭代器

    2,对比return, 可以返回多次值,可以挂起保存函数的运行状态

    4,三元表达式

    name=input('姓名')

    res='sb '  if name =='alex' else  'NB'

    列表推导式

    egg_list=[]

    for i in range (10):

      egg_list.append('鸡蛋%s' %i)

    egg_list =['鸡蛋%s'%i   for  i  in range(10)]

    优点:方便,改变了编程习惯,可称之为声明式编程

    五,生成器表达式

    1, 把 列表推导式的[ ]换成()就是生成器表达式

    1、把列表推导式的[]换成()就是生成器表达式
    
    #2、示例:生一筐鸡蛋变成给你一只老母鸡,用的时候就下蛋,这也是生成器的特性
    >>> chicken=('鸡蛋%s' %i for i in range(5))
    >>> chicken
    <generator object <genexpr> at 0x10143f200>
    >>> next(chicken)
    '鸡蛋0'
    >>> list(chicken) #因chicken可迭代,因而可以转成列表
    ['鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4',]
    
    #3、优点:省内存,一次只产生一个值在内存中
  • 相关阅读:
    我国自主研发的先进辅助驾驶系统(ADAS)控制器产品实现量产配套
    国务院印发《新一代人工智能发展规划》
    如何删除svn标签
    【转载】DHCP流程
    1-1 如何进行自我规划?
    人要像鹰一样重生、蜕变、成长
    人的一生好像乘坐北京地铁一号线
    【转载】接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点
    【转载】BAT 批处理脚本教程
    SNAT 和 DNAT
  • 原文地址:https://www.cnblogs.com/lijieshi/p/9177748.html
Copyright © 2011-2022 走看看