zoukankan      html  css  js  c++  java
  • 迭代器

    • 可迭代对象Iterable

    我们已经知道,可以直接作用于for循环的数据类型有以下几种:
    一类是集合数据类型,如list,tuple,dict,set,str等;
    一类是generator,包括生成器何带yield的generator function。
    这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。
    可以使用isinstance()判断一个对象是否是Iterable对象

    from collections import  Iterable
    a = isinstance([],Iterable)#True
    b = isinstance({},Iterable)#True
    c = isinstance("abc",Iterable)#True
    d = isinstance((x for x in range(10)),Iterable)#True
    e = isinstance(100,Iterable)#False
    • 迭代器:Iterator

    而生成器不但可以作用于for循环,还可以被next(0函数不断调用饼返回下一值,知道最后跑出StopIteration错误表示无法继续返回下一个值了。
    可以被next()函数调用并不断返回下一个值的对象成为迭代器:Iterator
    可以使用isinstance()判断一个对象是否是Iterator对象:

    from collections import  Iterator
    a = isinstance((x for x in range(10)),Iterator)#True
    b = isinstance({},Iterator)#False
    c = isinstance("abc",Iterator)#False
    • iter():Iterable变成Iterator

    生成器都是Iterator对象,但是list,dict,str虽然是Iterable,却不是Iterator
    把list、dict、str等Iterable变成Iterator可以使用iter()函数:

    from collections import  Iterator
    a = isinstance((x for x in range(10)),Iterator)#True
    b = isinstance(iter({}),Iterator)#True
    c = isinstance(iter("abc"),Iterator)#True
    for x in [1,2,3,4,5]:
        print(x)
    print("--------上面表达式实际上就是相当于下面----------")
    #iter()获得Iterator对象
    it = iter([1,2,3,4,5])
    while True:
        try:
            #获得下一个值
            x = next(it)
            print(x)
        except StopIteration:
            #遇到StopIteration就退出循环
            break
  • 相关阅读:
    LeetCode数据库178
    LeetCode数据库181
    LeetCode数据库177
    LeetCode数据库176
    HNOI2003 消防局的设立
    HNOI2001 产品加工
    Luogu P1020 关路灯
    NOIP2004 虫食算
    SP2713 GSS4-Can you answer these queries IV
    APIO2008 免费道路
  • 原文地址:https://www.cnblogs.com/cheng662540/p/8082533.html
Copyright © 2011-2022 走看看