• 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
  • 相关阅读:
    JavaScript 以POST方式打开新页面
    C# 实现守护进程
    SQL Server 之 使用RowCount遍历表数据
    SQL Server 之 存储过程调用C#编写的dll文件
    C# 多线程学习整理
    java 学习的有用链接
    git 操作命令
    关于各种Map的那些事
    JAVA 反射机制详解
    深入理解java:注解(Anotation)自定义注解
  • 原文地址:https://www.cnblogs.com/w-yumiao/p/8324192.html
Copyright © 2020-2023  润新知