• Python中的生成器(generator)


      生成器:

     在函数内部包含yield关键字,那么该函数执行的结果就是生成器(生成器即是迭代器)

     

    yield的功能:1.把函数的执行结果做成迭代器(帮函数封装好__iter__(),__next__()方法)

                          2.函数暂停与再继续进行的状态是由yield保存的

    yield与return的比较?

       相同点:都有返回值的功能

       不同点:return只能返回一次值,而yield可以返回多次值

    def f():
    
        yield 5
        print("ooo")
        return
        yield 6
        print("ppp")
            # if str(tem)=='None':
            #     print("ok")
    
    f=f()
    # print(f.__next__())
    # print(f.__next__())
    for i in f:
        print(i)
    
    '''
    return即迭代结束
    for不报错的原因是内部处理了迭代结束的这种情况
    '''
    1、自定义range:
    # def my_range(start,stop,step=1):
    # while start<stop:
    # yield start
    # start+=step
    # g=my_range(1,5,2)
    # print(next(g))
    # print(next(g))
    2、send的工作方式:
    def f():
        print("ok")
        s=yield 7
        print(s)
        yield 8
    
    f=f()
    print(f.send(None))
    print(next(f))
    
    #print(f.send(None))等同于print(next(f)),执行流程:打印ok,yield7,当再next进来时:将None赋值给s,然后返回8,可以通过断点来观察   


    python的三元表达式+列表解析+生成器表达式
    三元表达式:
    # def max2(x,y):
    # if x>y:
    # return x
    # else:
    # return y
    # x=10
    # y=20
    # res=x if x>y else y
    # print(res)
    列表解析:
    l = ['egg%s'%i for i in range(10)]
    print(l

    l = ['egg%s'%i for i in range(10) if i > 5]
    print(l)
    names = ['alex_sb','egon','wupeiqi_sb','yuanhao_sb']
    names_new = [name for name in names if name.endswith('sb')]
    print(names_new)
    生成器表达式
    g = ('egg%s'%i for i in range(10))##将中括号变成小括号即为生成器表达式
    #迭代器同一时间在内存中只有一个值
    print(g)
    print(next(g))
    print(next(g))
    with open('db.txt',encoding = 'utf-8') as f:
    g = (len(line) for line in f)
    print(max(g))
     
  • 相关阅读:
    杂记 后台代码取DataSource中的值,和不间断滚动JS
    利用IHttpModule实现URL地址转发功能
    在ASP.NET中跟踪和恢复大文件下载
    小记,取GB2312汉字的首字母
    小记,提供文件下载,并控制下载速度
    黑客知识系列之木马程序隐身的技术
    经典算法C#四种排序算法
    跟我学做c#皮肤美化(六)
    【转】xPath语法介绍
    一个httpwebrequest异步下载的例子
  • 原文地址:https://www.cnblogs.com/huyingsakai/p/9177809.html
Copyright © 2020-2023  润新知