python Day12

  • 生成器python社区,生成器与迭代器看成一种。生成器的本质就是迭代器。

    区别:生成器是我们自己用python代码构建的数据结构。迭代器都是提供的,或者转化得来的。

    • 获取生成器的三种方式:
      • 生成器函数

        def func():
        print(111)
        print(222)
        yield 3
        ret=func()
        print(next(ret))
        ##一个next对应一个yeid
      • 生成器表达式

      • python内部提供一些

    • Return和yield的区别

      • return :函数中只存在一个return结束函数,并且给函数的执行者返回值

      • yield:只要函数中有yield那么它就是生成器函数而不是函数了,生成器函数中可以存在多*个yield,一个yield对应一个next,yield不会结束生成器函数

        ###以生产包子的模型为列子,迭代器是直接生成5000个包子
        def func():
        l1=[]
        for i in range(1,5001):
        l1.append(f'{i}号包子')
        return l1
        print(func())
        def gen_fuc():
        for i in range(1,5001):
        yield f'{i}号包子'
        ret=gen_fuc()
        #这里需要100个包子
        for i in range(100):
        print(next(ret))
        #满足惰性机制,保留循环
      • yield from将返回的列表变成了迭代器

        def func():
        l1=[1,2,3,4,5]
        yield from l1
        ret=func()
        print(next(ret))
        print(next(ret))
    • 列表推导式(用一行代码构建一个比较复杂并且有规律的列表)
      • 循环筛选模式:[变量(加工后的变量)for 变量 in iterable]

        list=[i*3 for i in range(11)]
        print(list)
      • 筛选模式:[变量(加工后的变量)for 变量 in iterable if 条件]

        list=[i  for i in range(11) if i%2!=0]
        print(list)
      • 多循环模式

        ##将列表中含有两个ee的字符串筛选出来
        name=[["sfdsferwerwew","rewrew3","dfsfsfff"],["Ffdsdfsf","3rewttreedsd","fseww"]]
        list_name=[j for i in name for j in i if j.count("e")==2 ]
        print(list_name)
    • 生成器表达式(与列表推导式的写法几乎一模一样只有写法中将[],换成())
      list=[1,23,4]
      list=(i for i in list)
      print(next(list))
      ##结果是 1
      ##有点是十分的节省内存
  • 内置函数

    • eval 剥去字符串的外衣运算里面的代码

      s1="1+3"
      print(eval(s1))
      ###结果是 4
  • 作业

    • 有数据x={"name":"zhuxiayu","value":[{'timestmp':1343252532.09,"Value":100},{'timestmp':23252532.09,"Value":200}]}通过列表推导式转化为[[1343252532.09, 100], [23252532.09, 200]]

      x={"name":"zhuxiayu","value":[{'timestmp':1343252532.09,"Value":100},{'timestmp':23252532.09,"Value":200}]}
      list2=[[dit["timestmp"],dit["Value"]] for dit in x["value"]]
      print(list2)
    • 构建一个列表,列表里面是三种不同的尺寸,每个尺寸都有两种颜色

      colors=["white","black"]
      sizes=["S","M","L"]
      list=[ (size,color)for size in sizes for color in colors]
      print(list)
      ###结果:[('S', 'white'), ('S', 'black'), ('M', 'white'), ('M', 'black'), ('L', 'white'), ('L', 'black')]
    • 看代码求结果

      def demo():
      for i in range(4):
      yield i
      g=demo()
      g1=(i for i in g)
      g2=(i for i in g1) print(list(g1))
      print(list(g2))
      ###结果[0, 1, 2, 3]
      ## []

最新文章

  1. Round() 四舍五入 js银行家算法(转)
  2. 《Linux内核分析》第三周 构建一个简单的Linux系统MenuOS
  3. .Net底层剖析目录章节
  4. PHP json_decode object时报错Cannot use object of type stdClass as array
  5. Java可视化AWT
  6. 淘宝HSF服务的原理以及简单的实现
  7. .Net+MySQL
  8. MTK MOTA升级步骤
  9. istio实现自动sidecar自动注入(k8s1.13.3+istio1.1.1)
  10. Hacker需要掌握的基础
  11. C# Json数组序列化和反序列总结
  12. SCCM2012 R2实战系列之十:解决WDS服务无法启动问题(错误1067:进程意外终止)
  13. 8. 启动Tomcat闪退无法启动原因解决
  14. Bootstrap简单应用——对首页进行重构
  15. 视差滚动(Parallax Scrolling)插件补充
  16. Hive中创建结构体、数组以及map
  17. bzoj4842: [Neerc2016]Delight for a Cat
  18. 用Python语言设计GUI界面
  19. hadoop的maven地址
  20. 【总结整理】WebGIS学习-thinkGIS(二):关于level,比例尺scale,分辨率resolution

热门文章

  1. 如何利用tox打造自动自动化测试框架,看完就懂
  2. vuex多多,怎么当好一个奶妈
  3. 第五章 泛型&集合
  4. turtle库常用函数
  5. PHP imagecolorclosestalpha - 取得与指定的颜色加透明度最接近的颜色的索引
  6. react-router-dom中Switch和exact
  7. 苹果挖矿恶意程序处理(OSX/CoinMiner.X)
  8. Rx.js实现原理浅析
  9. 都2020年了,你还不知道怎么学习Python吗?
  10. 一个简单的CPP处理框架