• 生成器和生成器表达式


    一.生成器

    生成器的本质就是迭代器

    生成器的特点和迭代器一样,取值方式和迭代器一样__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.得到的值不一样.列表推导式得到的是一个列表,生成器表达式获得的是一个生成器

  • 相关阅读:
    WebAPI的文件上传与下载
    cefSharp框架中的C#方法和Web项目中的JS方法相互调用
    C# 引用类型的对象克隆(深拷贝)。
    C++模板特化
    一、JavaScript高级程序设计-----JavaScript简介
    二、C#图解教程第七章--类和继承
    C#IDIspose接口的使用
    CLR via C# 可空值类型
    WPF数据绑定
    计算机网路基础
  • 原文地址:https://www.cnblogs.com/liuqingyang/p/9468370.html
Copyright © 2020-2023  润新知