zoukankan      html  css  js  c++  java
  • 生成器和生成器表达式

    一.生成器

    生成器的本质就是迭代器

    生成器的特点和迭代器一样,取值方式和迭代器一样__next__(),send():给上一个yield.

    生成器一般由生成器函数或者生成器表达式创建,其实就是手写的迭代器.

    def func():
        print("111")
        yield 222
    
    gener = func() #这个时候函数不会执行,而是获取生成器
    ret = gener.__next__() #这个时候函数才会执行,yield的作用和return一样,也是返回数据
    print(ret)
    结果:
    111
    222

    yield和return的效果是一样的,区别是yield是分段来执行一个函数,return是直接停止执行函数

    二.生成器函数

    和普通函数没有区别,里面有yield的函数就是生成器函数.

    生成器函数在执行的时候,默认不会执行函数体,返回生成器. 通过生成器的__next__()分段执行这个函数. send()给上一个yield传值,不能在开头(没有上一个yield),最后一个yield也不可以用send()

    send 和__next__()区别:

    1.send和next()都是让生成器向下走一次

    2.send可以给上一个yield的位置传递值,不能给最后一个yield发送值,在第一次执行生成器代码的时候不能使用send()

    生成器可以使用for循环获取内部元素.

    三.推导式.

    1.列表推导式[结果 for循环 条件筛选]

    2.字典推导式 {k:v for循环 条件筛选}

    3.集合推导式{k for 循环 条件}

    四.生成器表达式

    (结果 for 循环 条件) 特点: 1.惰性机制 2.只能向前 3,节省内存

    生成器表达式和列表推导式的区别:

    1.列表推导式比较耗内存,一次性加载,生成器表达式几乎不占内存,使用的时候才分配和使用内存.

    2.得到的值不一样.列表推导式得到的是一个列表,生成器表达式获得的是一个生成器

  • 相关阅读:
    httpclient + TestNG 接口自动测试 第二章
    httpclient + TestNG 接口自动测试 第一章
    Kafka-manager启动命令
    多台服务器搭建Spark集群
    Scala学习 -- 基础语法
    Spark学习 -- RDD
    Spark 学习
    Angular constructor和OnInit的区别和适用场景
    TypeScript基础学习 —— 变量声明
    TypeScript基础学习 —— 基础类型
  • 原文地址:https://www.cnblogs.com/liuqingyang/p/9468370.html
Copyright © 2011-2022 走看看