zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    03、使用字符串
    加载selenium2Library失败---robotframework环境搭建(site-packages下无selenium2library文件夹)
    python无法启动火狐浏览器且报错“selenium.common.exceptions.WebDriverException: Message: Unable to find a matching set of capabilities”
    移动H5前端性能优化指南
    appium+python 启动一个app步骤
    Appium_Python_Client介绍
    python自动化---各类发送邮件方法及其可能的错误
    python自动化--批量执行测试之生成报告
    揭秘webdriver实现原理【转】
    selenium 三种断言以及异常类型
  • 原文地址:https://www.cnblogs.com/ddxxn/p/14475953.html
Copyright © 2011-2022 走看看