zoukankan      html  css  js  c++  java
  • python(16)——生成器

    #生成器(generator):Python中一边循环一边计算出元素的机制,称之为生成器

    #通过圆括号编写生成器推导式
    g = (x * x for x in range(1,4))
    print(g)
    
    #next()函数  获取生成器的下一个元素 ,后面没有元素时,弹出错误StopIteration
    result = next(g)
    print(result)
    result = next(g)
    print(result)
    result = next(g)
    print(result)
    #result = next(g)
    #print(result)
    #for循环进行遍历
    for i in g:
        print(i)

    #使用yield返回的函数会变成一个生成器
    #调用生成器的过程中,遇到yield时函数会暂停并保存当前所有的运行信息,返回yield值
    #在下一次执行next()方法时从当前位置运行

    #斐波那契函数
    def fibonacci(max):
        a=0
        b=1
        n=0
        while n < max:
            yield a #yield让函数变成一个生成器
            a,b = b,a+b
    
            n+=1
    #调用函数
    fib=fibonacci(5) #生成器类
    print(type(fib))
    
    #遍历生成器
    for i in fib:
        print(i)
    
    #列表打印斐波那契函数
    def fib(max):
        a=0
        b=1
        n=0
        while n < max:
            print(a)
            a,b=b,a+b#赋值语句,同时赋值
            n+=1
        return 'done'
    #调用
    fib(5)
    #每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
    #定义一个generator,依次返回1,3,5:
    def odd():
        print('step1')
        yield 1
        print('step2')
        yield (3)
        print('step3')
        yield (5)
    #调用生成器对象,用next()获取下一个返回值
    G=odd()
    result=next(G)
    #print(result)
    result=next(G)
    #print(result)
    result=next(G)
    #print(result)
    
    
    g=fibonacci(6)
    while True:
        try:
            x=next(g)
            print('g:',x)
        except StopIteration as e:
            print('generator return value:',e.value)
            break
  • 相关阅读:
    SEO
    Hack写法
    文学漫步
    [BZOJ4565] [Haoi2016] 字符合并
    [bzoj 3123][Sdoi2013]森林
    [UVA 12633] Super Rooks on Chessboard FFT+计数
    [HDU4609] 3-idiots FFT+计数
    [bzoj4554] [Tjoi2016&Heoi2016]游戏
    [bzoj4556] [Tjoi2016&Heoi2016]字符串
    [bzoj4552][Tjoi2016&Heoi2016]排序
  • 原文地址:https://www.cnblogs.com/w-yumiao/p/8324192.html
Copyright © 2011-2022 走看看