• 生成器


    '''
    什么是生成器:
    可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(不需__iter__方法了),所以生成器就是可迭代对象.

    生成器在python中有2中表现形式:
    1 生成器函数: 常规函数的定义,但是,使用yield语句而不是return语句返回结果,yield语句一次返回一个结果
    在每个结果中间,挂起函数的状态,以便下一次在它离开的地方继续执行
    2 生成器表达式: 列斯与列表推导,但是生成器返回按需产生金额过的一个对象,而不是一次构建一个结果列表
    '''
    #1 生成器函数表现形式:
    def test():
        yield 1
        yield 2
        yield 3
    g = test()
    print(g)   #<generator object test at 0x04AAF150>  生成器
    print(g.__next__())  #1
    print(g.__next__())  #2
    print(g.__next__())  #3
    
    #2 生成器表达式表现形式:
    t = (i for i in range(10))
    print(t)  #<generator object <genexpr> at 0x04B4BC90>   生成器
    print(t.__next__()) #0
    print(t.__next__()) #1
    
    
    #三元表达式,判断name等于abc?等于就返回yes 不等于就返回error
    name = 'abc'
    ret = 'yes' if name == 'abc' else 'error'
    print(ret)
    
    #列表解析:
    r = [i for i in range(10)]
    print(r)   #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    r = [i for i in range(10) if i > 6]  #列表解析中括号改成大括号就是生成器表达式了
    print(r)    #[7, 8, 9]


    #send使用

    def te():
    
    
        with open('a.txt','r',encoding='utf-8') as f:
    for i in f:
    result = yield i
    print(result) #打印t.send(None) 传递过来的值
    
    
    t = te()
    ak = t.__next__()
    t.send(None) #会她node 这个值传递给result = yield i

    print(ak)
    
    
     
    
    
    def f():
    print('打印第一次')
    ret = yield '返回数据1'
    print(ret)

    print('打印第一次')
    yield '返回数据2'

    ye = f()
    ye.__next__()

    C = ye.send('发射send数据') #send就相当于执行了一次__next__()方法,并且把内容传递给了上次yeild
    print(C)


    #总结:
    #1 列表解析中括号改成大括号就是生成器表达式了
    #2 列表解析与生成器表达式都是一种遍历的编程方式,只不过生成器表达式更节省内存(因为没有生成数据,只是一个内存地址,需要时候在生成数据)
    print(sum([i for i in range(100000000000000000)]))
  • 相关阅读:
    chrome——关于chrome浏览器的奇葩问题
    vscode——配置终端集成bash和cmd
    AndroidStudio——Android SDK
    Navicat——如何导出所有的查询数据
    mpvue——实现点击数组内的某一元素进行置顶(排序第一)操作
    TP5.x——开启跨域访问
    TP5.x——聊天列表查询
    MarkDowm——语法篇
    写一个整数四则运算的解析器——语法分析部分
    写一个整数四则运算的解析器——词法分析部分
  • 原文地址:https://www.cnblogs.com/ajaxa/p/8966854.html
Copyright © 2020-2023  润新知