• 生成器


    生成器:

    生成器的本质就是迭代器
    生成器函数 —— 本质上就是我们自己写得函数
    生成器的表现形式
    生成器函数
    生成器表达式

    生成器函数:
    含有yield关键字的函数就是生成器函数

    yield不能和return共用且需要写在函数内
        特点:
    调用函数的之后函数不执行,返回一个生成器
    每次调用next方法的时候会取到一个值
    直到取完最后一个,在执行next会报错
    #生成器函数 : 执行之后会得到一个生成器作为返回值
    ret = generator()
    print(ret)
    print(ret.__next__())
    
    def generator():
        print(1)
        yield 'a'
        print(2)
        yield 'b'
        yield 'c'
    g = generator()
    for i in g:
        print(i)
    ret = g.__next__()
    print(ret)
    ret = g.__next__()
    print(ret)
    ret = g.__next__()
    print(ret)

    send

    send 获取下一个值的效果和next基本一致
    只是在获取下一个值的时候,给上一yield的位置传递一个数据
    使用send的注意事项
    第一次使用生成器的时候 是用next获取下一个值
    最后一个yield不能接受外部的值
    def generator():
        print('abc')
        php = yield 1
        print('<=>',php)
        print('qwe')
        yield 2
    g = generator()
    ret = g.__next__()
    print('***',ret)
    ret = g.__next__()
    print('***',ret)
    

    def generator():
        print('abc')
        php = yield 1
        print('<=>',php)
        print('qwe')
        yield 2
    g = generator()
    ret = g.__next__()
    print('***',ret)
    ret = g.send('hello')
    print('***',ret)

    列表推导式 

    egg_list=['鸡蛋%s'%i for i in range(10)] 

    生成器表达式

     g = (i for i in range(10))

    两者区别:

    # 括号不一样
    # 返回的值不一样 === 几乎不占用内存

    [每一个元素或者是和元素相关的操作 for 元素 in 可迭代数据类型]    #遍历之后挨个处理
    [满足条件的元素相关的操作 for 元素 in 可迭代数据类型 if 元素相关的条件] #筛选功能
  • 相关阅读:
    c#向某网址Post信息,并得到Cookies
    调度自动化系统及调度数据网安全分析探讨
    C#winform中怎么将程序最小化到系统托盘
    电力配网自动化解决方案
    .NET (c#) 模拟 Cookie
    调整数组顺序使奇数位于偶数前面
    在字符串中删除特定的字符
    在O(1)时间内删除链表结点
    单链表逆置
    从尾到头输出链表
  • 原文地址:https://www.cnblogs.com/rxiaoxi/p/11942572.html
Copyright © 2020-2023  润新知