• python--006--迭代器协议和for循环工作机制


    1. 迭代器协议和for循环工作机制

    定义
    1)迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stopIteration异常,已终止迭代(只能往后不能往前退)。
    2)可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法)
    3)协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象。

    for循环机制
    for循环本质:循环所有对象,全都是使用迭代器协议
    注:(字符串、列表、元组、字典、集合、文件对象)这些都不是可迭代对象,只不过在for循环,调用了他们内部的__iter__方法,把他们变成了可迭代对象
    然后for循环调用可迭代对象的__next__方法去取值,而且for循环会捕捉StopIteration异常,以终止迭代

    str = "hello"
    for i in str:
        print(i)
    
    iter_test = str.__iter__()
    print(iter_test)
    print(iter_test.__next__())
    print(iter_test.__next__())
    print(iter_test.__next__())
    print(iter_test.__next__())
    print(iter_test.__next__())
    # print(iter_test.__next__())
    
    l = [1, 2, 3]
    for i in l:   # for循环实际上执行的就是这两步:i_l = l.__inter__() i_l.__next__()
        print(i)


    为何要有for循环
    序列类型 像列表、字符串等都有下标,用下标方式遍历没有问题,但如果是非序列类型的字典、集合、文件对象就不适用了。而for循环就是基于迭代器协议提供一个统一的可比遍历所有对象的方法,在遍历之前调用对象的__iter__()方法将其转换成一个迭代器,然后适用迭代器协议去实现循环访问,这样所有的对象就可以通过for循环来遍历了。

    next()函数:就相当于执行iter_l.__next__()

    l=['die','erzi','sunzi','chongsunzi']
    iter_l=l.__iter__()
    print(next(iter_l))  #next()--就相当于-->iter_l.__next__()

     看视频,做笔记,坚持学习

  • 相关阅读:
    C#计算某一些任务的执行时间(消耗时间)
    C#打印条码的几种方式
    使用escape编码地址栏中的中文字符
    SQL 批量删除数据表
    弹出层并锁定页面
    后台输出HTML
    C# 十进制与十六进制互转
    SQL判断临时表是否存在
    SQL Server 字符串处理
    Vue文件跳转$router传参数
  • 原文地址:https://www.cnblogs.com/jinf/p/11771908.html
Copyright © 2020-2023  润新知