• Python_Mix*生成器,生成器函数,推导式,生成器表达式


    • 生成器:
      • 生成器的本质就是迭代器
      • 生成器一般由生成器函数或者生成器表达式来创建,其实就是手写的迭代器
    •  1 def func():
       2     print('abc')
       3     yield 222     #由于函数中有了yield 
       4 
       5 ret = func()        
       6 print(ret)       #我们执行函数的时候实际上是获取生成器 
       7 
       8 结果:
       9 <generator object func at 0x10567ff68>
      10  这个叫func的生成器的内存地址0x10567ff68
      • 在Python中可以通过三种方式来获取生成器:
        • 1.通过生成器函数
        • 2.通过各种推导式来实现生成器
        • 3.通过数据的转换也可以获取生成器
      • yield:
        • 将函数中的return换成yield就是生成器,由于函数中存在了yield,我们再执行这个函数的时候就不再是函数的执行了,而是获取这个生成器.
      • return和yield的区别:
        • yield是分段来执行一个函数,return是直接停止执行函数.
      • 特点:
        • 生成器的特点和迭代器一样,取值方式和迭代器一样(__next__( ),send( ):给上一个yield传值)
    • 生成器函数:
      • 和普通函数没有区别,里面有yield的函数就是生成器函数
      • 生成器函数在执行的时候,默认不会执行函数体,返回生成器
      • 通过生成器的__next__( )分段执行这个函数
      • send( )给上一个yield传值,不能在开头(因为没有上一个yiel),最后一个yield也不可以用send(因为没有下一个yield)
    •  1 def eat():
       2     print('吃什么呢')
       3     a = yield '馒头'
       4     print('a=',a)
       5     b = yield '面条'
       6     print('b=',b)
       7     c = yield '水果'
       8     print('c=',c)
       9     yield '安排一下!'
      10 eats = eat()          #获取生成器
      11 ret1 = eats.__next__()
      12 print(ret1)
      13 ret2 = eats.send('胡辣汤')
      14 print(ret2)
      15 ret3 = eats.send('冰激凌')
      16 print(ret3)
      17 ret4 = eats.send('蛋挞')
      18 print(ret4)
    • 推导式:
      • 1)列表推导式[结果 for循环 条件筛选]
      • 2)字典推导式{结果 for循环 条件筛选}
      • 3)集合推导式{key for循环 条件}
    • 生成器表达式
      • (结果 for循环 条件)
      • 特点:
        • 1.惰性机制
        • 2.只能向前
        • 3.节省内存
  • 相关阅读:
    0909 初识编译原理
    校园跳蚤市场-Sprint计划
    校园跳蚤市场
    5.2-5.3
    5.1封装
    阅读2
    汉堡包
    五章-问题
    结对子作业 四则运算 V2.0
    四则运算升级版
  • 原文地址:https://www.cnblogs.com/mixw/p/9469718.html
Copyright © 2020-2023  润新知