day_11 生成器

 

1. 生成器本身是迭代器
    1.写迭代器的方式
      1.生成器函数
      2.生成器表达式
      3.各种推导式
    2.生成器函数
      函数内部有yield, yield返回->return
      yield把函数分段进行
      生成器可以使用for循环来获得里面的元素
      def func
          yield
      g=func()
      1.此时g并不是函数执行,而是获得一个生成器
       生成器本身是迭代器,所以再用_next_方法去里面一个一个的取.
       取到yield,当yield取完,没有yield的时候,会跑出StopIteration
       
      2.send()的用法和yield基本一致,就是send还有一个额外的功能,给上一个yield传值
        而且传值会发生在取值之前,send不能给最后一个yield传值,也不能在第一次执行生成器的时候使用

 

    
    3. 生成器表达式:基本上和推导式表达式一样,就是括号不一样而已
      1.形式g=(结果 for循环 if条件)
      2.特点:
        1.省内存
        2.惰性机制,只能手动一个一个的取
        3.只能向前
    4.各种推导式
      1.列表推导式[结果 for循环 if条件]
      2.字典推导式{key:value for循环 if条件}
      3.集合推导式{key for循环 if条件}
      
    5.生成器表达式和列表推导式的区别
     1.列表推导式一次性加载,比较耗内存,生成器表达式几乎不占内存,只有在使用的时候才分配         使用内存(惰性机制)
     2.结果不一样,列表推导式的结果是列表,生成器表达式的结果是生成器
     
    6.yield from
       把可迭代对象中每一项数据作为生成器结果返回

 

posted @ 2018-11-02 17:12  阿布_alone  阅读(91)  评论(0编辑  收藏  举报
TOP