• python-迭代器与生成器1


    python-迭代器与生成器1

    迭代器与生成器
    列表的定义
    列表生成式:作用使代码更加简洁
    通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。
    而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面
    几个元素,那后面绝大多数元素占用的空间都白白浪费了。

    所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续
    的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边
    计算的机制,称为生成器:generator。

    a=[1,2,3]
    print(a)
    a=[i*2 for i in range(10)] #也可以是传一个函数[fun for i rang(10)]
    print(a)
    
    #其他方式来完成:
    a=[]
    for i in range(10):
        a.append(i*2)
    print(a)
    
    
    
    打印结果
    [1, 2, 3]
    [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
    [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
    
    
    生成器:只有在调用时才会生成相应的数据,调用哪次就参生哪次。
    只记录当前位置
    只有一个方法_next_();2.7版本用netx();
    (i*i for in in range(10))
    
    例1:斐波那契
    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)
    
    打印结果
    ------------------
    1
    1
    2
    3
    5
    8
    13
    21
    34
    55
    
    例2  斐波那契
    def fib(max):
        n,a,b=0,0,1
        while n<max:
            print(b)
            #yield b
            a,b=b,a+b     #t=(b,a+b) 是一个tuple
            n=n+1
        return "----done______"
    fib(10)
    打印结果
    ------------------
    1
    1
    2
    3
    5
    8
    13
    21
    34
    55
    
    
    例3:生成器
    def fib(max):
        n,a,b=0,0,1
        while n<max:
            #print(b)
            yield b
            a,b=b,a+b     #t=(b,a+b) 是一个tuple
            n=n+1
        return "----done______"
    #print(fib(10))
    f=fib(10)
    print(f.__next__())
    print(f.__next__())
    
    打印结果
    ------------------
    1
    1
    
    
    
    例4:
    
    def fib(max):
        n,a,b=0,0,1
        while n<max:
            #print(b)
            yield b
            a,b=b,a+b     #t=(b,a+b) 是一个tuple
            n=n+1
        return "----done______"
    #print(fib(10))
    f=fib(10)
    print(f.__next__())
    print(f.__next__())
    print("=======”"开始 ")
    
    
    打印结果
    --------------
    1
    1
    =======开始 
    2
    3
    5
    8
    13
    21
    34
    55
  • 相关阅读:
    如何在调试PHP代码时不显示错误信息
    如何实现网页组件的随意拖拽
    如何做一个简易的HTML代码编辑器
    如何在网页中动态显示时间
    Luogu2577 | [ZJOI2005]午餐 (贪心+DP)
    Luogu2345 | 奶牛集会 (树状数组)
    解决NahimicSvc32.exe与bilibili直播姬的音频不兼容的问题
    STL函数 lower_bound 和 upper_bound 在算法竞赛中的用法
    电子取证 | 第三届美亚杯(2017)个人赛题解
    快速安装字体.bat批处理脚本
  • 原文地址:https://www.cnblogs.com/kezi/p/12019463.html
Copyright © 2020-2023  润新知