• 生成器


    
    
    ##生成器
    #在Python中,这种.边循环.边计算的机制,称为生成器:generator。
    #不必创建完整的list,从⽽节省⼤量的空间
    # 要创建⼀个⽣成器,有很多种⽅法。第⼀种⽅法很简单,只要把⼀个列表⽣成式的[] 改成()

    L = [x for x in range(5)]
    print(L) #[0, 1, 2, 3, 4]

    L = (x for x in range(5))
    print(L) #<generator object <genexpr> at 0x000001F2736538E0>

    print(next(L)) #0
    print(L.__next__()) #1
    print(L.__next__()) #2

    #
    生成器函数 # Python中提供的生成器: # 1. # 生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行 # 2. # 生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表 # # 生成器Generator: #   本质:迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现) #   特点:惰性运算, 开发者自定义 def generator(): print(1) return 'a' ret = generator() print(ret) #1 a #只要含有yield关键字的函数都是生成器函数 # yield不能和return共用且需要写在函数内 def generator(): print(1) yield 'a' # #生成器函数 : 执行之后会得到一个生成器作为返回值 ret = generator() print(ret) ##<generator object generator at 0x0000020DBAC8A0F8> print(ret.__next__()) #1 a print("==============") def generator(): print(1) yield 'a' print(2) yield 'b' yield 'c' g = generator() # for i in g: # print(i) print("||||||||||||") ret = g.__next__() print(ret) #1 a ret = g.__next__() print(ret) #2 b ret = g.__next__() print(ret) #c #娃哈哈%i def wahaha(): for i in range(2000000): yield '娃哈哈%s'%i g = wahaha() g1 = wahaha() print(g.__next__()) #g和g1没有关系 print(g1.__next__()) g = wahaha() count = 0 for i in g: count +=1 print(i) if count > 50: break print('*******',g.__next__()) for i in g: count +=1 print(i) if count > 100: break def demo(): for i in range(4): yield i g=demo() g1=(i for i in g) g2=(i for i in g1) print(list(g1)) #[0, 1, 2, 3] print(list(g2)) #[]
    def test1():
        list1 = [1,2,3,4,5,6]
        for i in list1:
            yield i
    
    g = test1()
    print(g.__next__()) #1
    print(g.__next__()) #2
    
    
    def test2():
        for i in range(5):
            yield "编号%s"%i
    
    g1 = test2()
    print(g1.__next__())
    print(g1.__next__())
    print("==========")
    
    for i in g1:
        print(i)
    #结果
    '''
    编号0
    编号1
    ==========
    编号2
    编号3
    编号4
    '''
  • 相关阅读:
    redis 资料
    php 安装redis php扩展
    Unity生命周期
    疫情下的大学生人格发展研究
    对联一句——百花深处
    Unity实现byte[]合成图像
    Unity实现精灵资源动态加载
    数据结构与算法初步
    Unity中激活子物体
    C#实现自定义列表
  • 原文地址:https://www.cnblogs.com/chvv/p/10165905.html
Copyright © 2020-2023  润新知