zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    毕业面试试题汇总
    js获取系统日期
    非常酷的3D翻转相册展示特效
    CSS 替换元素和非替换元素 行内非替换元素
    怎样在linux下编写C程序并编译执行
    库和框架的区别
    转载:em(倍)与px的区别
    RPMForge介绍及安装
    linux下安装jdk和配置环境变量
    PCI PCI-X PCI-E介绍
  • 原文地址:https://www.cnblogs.com/kezi/p/12019463.html
Copyright © 2011-2022 走看看