zoukankan      html  css  js  c++  java
  • day12 Python 生成器推导式的坑

    重要的事情说三遍!!!

    生成器的惰性机制: ⽣成器只有在访问的时候才取值!!!

    生成器的惰性机制: ⽣成器只有在访问的时候才取值!!!

    生成器的惰性机制: ⽣成器只有在访问的时候才取值!!!

    实例一

      请问以下生成的三个生成器最后print的结果是多少?

    def func():
      print(111)
      yield 222
      yield 333
    g = func() # 生成-->⽣成器g
    g1 = (i for i in g) # 生成器g1. 但是g1的数据来源于g g2=(i for i in g1) # ⽣成器g2. 来源g1
    
    print(list(g)) # 获取g中的数据. 这时func()才会被执行. 打印111.获取到222. g完毕.
    print(list(g1)) # 获取g1中的数据. g1的数据来源是g. 但是g已经取完了. g1 也就没有数据了
    print(list(g2)) # 和g1同理
    
    结果:
    ["222","333"]
    []
    []

    实例二

      请问最后print的结果是?

    def add(a, b):
        return a + b
    
    
    def test():
        for r_i in range(4):  # 0,1,2,3
            yield r_i
    
    g = test()  # 0,1,2,3
    for n in [2, 10]:  
        g = (add(n, i) for i in g)  
      """
      此处要注意,此处g这个生成器表达式在循环的时候并没有调用,只在最后的print才调用了,此处可以理解为:循环的时候,生成器表达式并没有执行,第一次循环n2=的时候
      g = (add(n, i) for i in g) 这个生成器表达式的代码没有执行只是拷贝到一块新的内存中,第二次循环的时候n=10,此时生成器表达式没有执行,
      g = (add(n, i) for i in g) 也拷贝到了内存中。当最后print的时候,n最后的值是10,然后开始执行生成器表达式中的代码。此时
      g = (add(10,i) for i in (add(10,i) for i in g));
      """
      
    print(list(g))  #
    
    结果:
    20,21,22,23 
    

      

     

  • 相关阅读:
    工业4G DTU是什么和普通DTU有什么不同
    NB-IOT基站的优势和特点
    rs485通讯模块有什么作用
    串口服务器的具体做用
    4G DTU是什么 可以应用于哪些行业?
    关于linux文件出现属性显示?????????? ? ?问题的一些解决方法
    log4j.properties配置与将异常输出到Log日志文件实例
    将字符串向hdfs中写入,出现中文乱码!
    impala操作hase、hive
    Kudu基本操作及概念
  • 原文地址:https://www.cnblogs.com/fanghongbo/p/9892198.html
Copyright © 2011-2022 走看看