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 @   阿布_alone  阅读(95)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
TOP
点击右上角即可分享
微信分享提示