• 迭代器


    Iterable:可迭代的

    列表,字典,元组,字符串,集合这些可以循环的都是可迭代的。

    还有一类是生成器(generator),生成器都是可迭代的。

    下面的列子都是可迭代的。

    from collections import Iterable                  
    print(isinstance([],Iterable))
    print(isinstance((),Iterable))
    print(isinstance({},Iterable))
    print(isinstance("abc",Iterable))
    a = (i for i in range(10))
    print(isinstance(a,Iterable))
    def func(max):
        n,a,b = 0,1,2
        if n < max:
            a,b = b,a+b
            yield b
            n += 1
    
    f = func(10)
    print(isinstance(f,Iterable))
    

     

    迭代器:Iterator

    可以被next函数调用并不断返回下一个值的对象称为迭代器。我们目前学的迭代器只有生成器。

    生成器都是可迭代的对象,但是字典,列表,元组,集合等虽然是可迭代的,但并不是生成器。

    from collections import Iterator
    print(isinstance([],Iterator))
    print(isinstance({},Iterator))
    print(isinstance((),Iterator))
    print(isinstance("abc",Iterator))
    print(isinstance(set(),Iterator))
    print(isinstance((i for i in range(10)),Iterator))
    def func(max):
        n,a,b = 0,1,1
        if n < max:
            a,b = b,a+b
            yield b
            n += 1
    
    f = func(15)
    print(isinstance(f,Iterator))
    

    元组,字典,列表等虽然不是迭代器,但是我们可用iter()函数将其变为迭代器。

    print(isinstance(iter([]),Iterator))   
    print(isinstance(iter({}),Iterator))
    print(isinstance(iter(()),Iterator))
    
    a = [1,2,3,4,5]           #用iter()函数将列表a变为迭代器,可用next()函数
    m = iter(a)
    print(next(m))
    print(next(m))     
    

      

     总结:迭代器对象表示的是一个数据流,不知道具体数量,只能用next()函数一个一个输入出来到最后到最后一个数后报错,才能知道这个迭代器有多少元素。

     列表被iter()函数转换为迭代器后,并不能用leng()来查看列表的长度(没转换前可以),只能用next()一个一个唤醒并返回值后才能知道有多少元素。 

     凡是可作用于next的对象都是一个迭代器类型,他们表示一个惰性序列。

     

  • 相关阅读:
    结构体struct和typedef后面接指针的含义
    C++中关于指针初始化和使用NULL的理解
    (虚)继承类的内存占用大小
    为什么构造函数不能为虚函数
    C++中变量自动初始化的问题
    CY7C68013A的一点总结
    Altium designer总结
    在Linux系统上限制远程登录的IP
    linux系统如何限制其他用户登录
    使用秘钥对登录Linux系统
  • 原文地址:https://www.cnblogs.com/Roc-Atlantis/p/8630810.html
Copyright © 2020-2023  润新知