• 生成器


    1.生成器

    迭代器有两种:一种是调用方法直接返回的,一种是可迭代对象通过执行iter方法得到的,迭代器的好处是可以节省内存。

    生成器:就是自己用python代码写的迭代器,生成器的本质就是迭代器。

    迭代器的构建:1.通过生成器函数 2.生成器表达式。

    #生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行

    def func1(x):
        x +=1
        print(x)
        yield x
        x +=2
        print(x)
        yield x
    m = func1(5)
    print(m.__next__())
    print(m.__next__())

    yield和return

    yield:不会结束函数,一个next对应一个yield,给生成器对象.__next__()返回值。

    return:结束函数,给函数的执行者返回一个值。

    #生成器表达式

    类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表

    g = (i for i in range(10000))
    print(g.__next__())
    print(g.__next__())
    print(g.__next__())
    print(g.__next__())
    print(g.__next__())

    2.生成器与迭代器的区别

    区别1:自定制的区别

    区别2:内存级别的区别

    迭代器是需要可迭代对象进行转化。可迭代对象非常占内存。

    生成器直接创建,不需要转化,从本质就节省内存。

    3.send 与 next

    def func1():
        # print(1)
        count = yield 6
        print(count)
        # print(2)
        count1 = yield 7
        print(count1)
        # print(3)
        yield 8
    g = func1()
    print(next(g))
    g.send('alex')
    g.send('太白')

    send与next一样,也是对生成器取值(执行一个yield)的方法。

    send可以给上一个yield传值。

    第一次取值永远是next。

    最后一个yield永远也得不到send传的值。

    4.列表推导式

    一行代码几乎搞定你需要的任何列表。

    循环模式

    l = [i for i in range(1,10)]
    print(l)

    筛选模式

    m = [i for i in range(1,30) if i%3==0]
    print(m)

    列表推导式优缺点:

    优点:一行解决,方便。

    缺点:容易着迷,不宜排错,不能超过三次循环。

    列表推导式不能解决所有列表的问题,所以不要太可以用。

  • 相关阅读:
    js识别键盘操作
    抽奖活动 算法设计
    Eureka 配置项说明
    manjaro 更新chrome报签名错误
    manjaro系统上使用asdf安装php注意事项
    Failed to load config "react-app" to extend from.
    YarnV2 install
    银河麒麟安装达梦数据库失败Unable to load native library: libnsl.so.1: cannot open shared object file: No such file or directory
    Net5中使用Swagger
    编译Windows 版本的Redis 6.x
  • 原文地址:https://www.cnblogs.com/caoshitong/p/9506242.html
Copyright © 2020-2023  润新知