zoukankan      html  css  js  c++  java
  • 生成器内容

    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] 此时才会动生成器


      

  • 相关阅读:
    慕课网 k8s环境搭建坑点
    这种yum源为阿里云
    linux yum安装jdk
    docker 常用命令
    docker部署
    docker windows安装 就是这么简单
    idea
    jrebel 破解失败 Unexpected response from server
    bladex flowable 表关系
    bladex 接口
  • 原文地址:https://www.cnblogs.com/feifeifeisir/p/9469080.html
Copyright © 2011-2022 走看看