zoukankan      html  css  js  c++  java
  • 面试_生成器的调用和定义

    生成器的调用和定义

     1 def add(a, b):  # 普通求和函数
     2     return a + b
     3 
     4 
     5 def test():  # 生成器函数
     6     for r in range(4):
     7         yield r
     8 
     9 
    10 g = test()
    11 for n in [2,10]:
    12     #生成器的定义出  # 仅仅是定义了2次生成器
    13     g=(add(n,i) for i in g)
    14 
    15 # 生成器的调用
    16 print(list(g))

    生成器的定义

     1 for n in [2, 10]:
     2     # 循环内只是定义了两次生成器, 并不会去执行他
     3     # 等待调用的时候再去执行
     4     # 调用的时候执行, 会去寻找变量n
     5     # n已经被for循环到最后一个, n==10
     6 
     7     # 第一次循环不会调用g, 只是定义了一个g生成器
     8     # 第二次循环才会调用g
     9 
    10     # 等调用g的时候, n已经循环两次=10
    11     # 第一次调用g, g里面是0, 1, 2, 3(test函数产生)
    12     # 第二次调用g, g里面是10+0, 10+1, 10+2, 10+3, 10+4
    13     g = (add(n, i) for i in g)
    14     print(list(g))

    生成器的调用

     1 '''
     2 第二次循环才会调用g
     3 g=(add(n,i) for i in g)
     4 首先调用第一个g创建第二个g
     5 
     6 
     7 
     8 第一次调用g
     9 第一个g: 0, 1, 2, 3 (test产生) 
    10 吧元素传入add, 
    11 n为10(循环最后的结果)
    12 
    13 传入第二个g的元素是:(n+g)
    14 10+0, 10+1, 10+2, 10+3
    15 此时g的取值范围是(10~13)
    16 
    17 
    18 
    19 
    20 第二次调用g:
    21 首先调用上一个g生成器(10~13)
    22 然后add(n=10, g=(10~13))
    23 此时g的取值范围是(20~23)
    24 
    25 
    26 list强转g, 把g的元素取出
    27 [20, 21, 22, 23]
    28 
    29 
    30 '''
  • 相关阅读:
    前端下载(导出)功能实现
    cookie和session
    MySQL常用数据类型
    Spring AOP小结
    Spring IoC小结
    BST、B树、B+树、B*树
    java中的匿名内部类小结
    java中的内部类小结
    Collections类常用方法总结
    Java垃圾回收小结
  • 原文地址:https://www.cnblogs.com/caihuajiaoshou/p/10624607.html
Copyright © 2011-2022 走看看