• 生成器内容


    1,生成器
        生成器的本质就是迭代器
        生成器的特点和迭代器一样,取值方式和迭代器一样(__next__(),send():给上一个yield传值)
        生成器一般有生成器函数或者生成器表达式来创建
        其实就是手写的迭代器
    
    2,生成器函数
        和普通函数没有区别,里面有yield的函数就是就是生成器函数
        生成器函数在执行的时候,默认不会执行函数体,返回生成器
        通过生成器的__next__()分段执行这个函数
        send()给上一个yield传值,不能在开头的位置(没有上一个yield),最后一个yield也不可以用send()
    3,推导式
        1,列表推导式 [结果, for循环, 条件筛选]
        2,字典推导式 {k:v, for循环, 条件筛选}
        3,集合推导式 { k ,for循环,条件筛选]
    4,生成器表达式
        (结果  for循环  条件)
        特点:
            1,惰性机制
            2,只能向前
            3,节省内存
    1,
    def
    func(): print(111) yield 222 yield 333 g = func() #获取生成器 g1 = (i for i in g) #生成器 g2 = (i for i in g1) #生成器 print(list(g2)) # 111 [222,333] 源头,从源头把数据拿走了 print(list(g1)) # [] 这里执行的时候,源头已经没有数据

    2,很坑的面试题
    def add(a,b):       #求和
        return a+b
    
    def test():         #生成器函数 0,1,2,3
        for i in range(4):
            yield i
    g = test()          #获取生成器
    for n in [2,10]:   #到最后才放数据(惰性)
        g = (add(10,i)for i in g) 
     #此时的g是一个生成器,实际上内部并没有被执行
      相当于以下代码:
        n = 10
        g = (add(n, i) for i in g)
        g = (add(n, i) for i in g)
    print(list(g))      # [20, 21, 22, 23] 此时才会动生成器


      

  • 相关阅读:
    ruby_debug笔记
    来自Neil
    rails 在迭代里的那些条件
    rails 表单嵌套
    rails present? 和 blank? 对于bool 值
    泛泛
    设计模式——策略模式
    Spring容器初始化过程
    Spring之ResourceLoader加载资源
    Spring之ClassPathResource加载资源文件
  • 原文地址:https://www.cnblogs.com/feifeifeisir/p/9469080.html
Copyright © 2020-2023  润新知