• python学习--迭代器


    Python有三大神器:迭代器、生成器、装饰器;

    一、迭代(Iteration)、可迭代对象(Iterable)

    在Python中数据类型list、touple、str、dict、set均可通过for循环进行遍历,通过for循环的这种遍历就称为迭代

    以上几种类型都是可迭代对象(Iterable)

    在python中可通过函数isinstance() 判断一个对象是否是 Iterable 对象。

    from collections import Iterable
    
    a = 123
    print(isinstance(a,Iterable))
    
    b = ["abc",2,3]
    print(isinstance(b,Iterable))
    
    c = {"name":"xiaobai"}
    print(isinstance(c,Iterable))

    运行结果:

     二、迭代器(Iterator

    能被函数next()调用并不断返回下一个值的对象称为迭代器-Iterator

    也可用函数isinstance()判断一个对象是否是迭代器。

    a = ["abc",2,3]
    print(isinstance(a,Iterator))    # False
    
    b = {"name":"xiaobai"}
    print(isinstance(b,Iterator))    # False
    
    c = (1,2,3)
    print(isinstance(c,Iterator))    # False

    运行结果:

    由此可见上面所说的几种类型虽然是可迭代对象(Iterable)但并不是迭代器(Iterator);

    可使用函数iter()将可迭代对象(Iterable)变为迭代器(Iterator)。

    from collections import Iterable,Iterator
    
    a = "100"
    new_a = iter(a)
    print(new_a)
    print(isinstance(new_a,Iterator))

    运行结果:

    三、迭代器的两个基本方法:iter()和next()

    函数iter():创建一个迭代器

    函数next():不断返回迭代器的下一个值

    # 迭代器的两个方法
    a = ["","绿",""]
    iter_a = iter(a)        # 创建迭代器
    print(iter_a)
    
    print(next(iter_a))     # next()返回迭代器的下一个值
    print(next(iter_a))
    print(next(iter_a))
    print(next(iter_a))     # next()取值取到没有了会抛出StopIteration异常

    运行结果:

    next()取值取到没有时会抛异常,通过try..except取出全部值

    # 用next()取到全部值
    a = ["","绿",""]
    iter_a = iter(a)        # 创建迭代器
    
    while True:
        try:
            print(next(iter_a))
        except StopIteration:
            break

    运行结果:

    迭代器也可以使用for循环进行遍历:

    # 使用for循环遍历
    a = ["","绿",""]
    iter_a = iter(a)        # 创建迭代器
    
    for i in iter_a:
        print(i)

    四、将类作为迭代器使用

    把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__()__next__()

    __iter__() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了__next__() 方法并通过 StopIteration 异常标识迭代的完成。

    __next__() 方法(Python 2 里是 next())会返回下一个迭代器对象。

    创建一个返回数字的迭代器,初始值为 1,逐步递增 1:

    # 创建一个返回数字的迭代器,初始值为 1,逐步递增 1
    class MyIter:
        def __iter__(self):
            self.a = 1
            return self         # 返回一个迭代器对象,
    
        def __next__(self):     # 返回下一个值
            b = self.a
            self.a += 1
            return b
    
    iternumbers = MyIter()
    myiter = iter(iternumbers)
    print(next(myiter))
    print(next(myiter))

    运行结果:

    1
    2
    
    Process finished with exit code 0

     

  • 相关阅读:
    boost lexical_cast 字符串数字间的字面转换(学习笔记)
    Smoke Testing
    深入浅出InfoPath——手工绑定托管代码
    深入浅出InfoPath——操作InfoPath元素
    深入浅出SharePoint2010——附录:常用术语对照
    CAML语法必备
    深入浅出SharePoint ——2010 新特性之搜索
    BVT测试
    Windows 7的71个运行命令列表
    深入浅出InfoPath——如何在项目中引用GAC中的dll文件
  • 原文地址:https://www.cnblogs.com/ddxxn/p/14475953.html
Copyright © 2020-2023  润新知