zoukankan      html  css  js  c++  java
  • Python学习之路:生成器

    列别生成式:使代码更简洁

    >>> [i*2 for i in range(10)]
    [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
    

     生成器是为了节省内存空间,生成器在调用的时候才会生成相应的数据,不调用的时候只是分配内存;

    只有一个__next__()方法。2.7里是next()

    生成器不可用切片的方式取;

    >>> b =( i*2 for i in range(10))
    >>> b
    <generator object <genexpr> at 0x103e5dd00>
    
    >>> b.__next__()
    0
    >>> b.__next__()
    2
    >>> b.__next__()
    4
    

     generator非常强大,如果推算的算法比较复杂,用类似列表生成式的for循环无法实现的时候,还可以用函数来实现。

    Fibonacci数列:

    def fib(max):
        n,a,b=0,0,1
        while n < max:
            print(b)
            a,b=b,a+b
            n=n+1
        return 'done'
    
    fib(10)
    

     函数生成式及异常信息提醒def fib(max)    n,a,b=0,0,1

        while n < max:
            #print(b)
            yield b #转换成生成器
            a,b=b,a+b
            n=n+1
        return 'done'#如果下面程序中next超过max范围,会报错,提示异常
    
    f=fib(100)
    print(f.__next__())
    print("========")#可以让函数中断,之后继续
    print(f.__next__())
    print(f.__next__())
    print(f.__next__())
    print(f.__next__())
    print(f.__next__())
    print(f.__next__())
    print(f.__next__())
    print(f.__next__())
    print(f.__next__())
    
    print("=====start loop ======")
    for i in f:
        print(i)
    
    #抓住异常
    g=fib(6)
    while True:
        try:
            x=g.__next__()
            print('g:',x)
        except StopIteration as e:
        print('Generator return value:',e.value)
        break
  • 相关阅读:
    第四章JAVA EE基础知识
    第二章代码审计环境搭建
    第三章代码审计辅助工具简介
    python json.dumps 中文需要注意的事项
    multiprocessing 使用实践
    Python中*args和**kwargs的使用实践
    python 继承学习记录
    关于vue-element-admin启动项目遇到的一些问题
    @RequestParam
    前端菜单点击切换样式,菜单控制iframe
  • 原文地址:https://www.cnblogs.com/xiaobai005/p/7966583.html
Copyright © 2011-2022 走看看