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

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

    python 中只要遵循迭代器协议生成对象就是可迭代对象

    for 循环本质:就是循环所有对象,全部都是使用迭代器协议.
    '''
    '''
    很多人都会想,for循环本质就是遵循迭代器协议去访问对象,那么for循环对象肯定都有迭代器了啊,没错
    那既然这样,for循环可以遍历(字符串,字典,元祖,列表,集合,文件对象),那么这些类型的数据都可迭代对象?
    但是,为什么定义个一列表ls = [1,2,3,4],并没有ls.next()方法啊,这是为什么?
    其实:(字符串,字典,元祖,列表,集合,文件对象) 这些都不是可迭代对象,只不过for循环的时候,调用他们内部的__iter__方法;
    把他们变成了可迭代对象,然后for循环调用可迭代对象的__next__方法取值,而且for循环会捕捉Stopliteration异常,以终止迭代
    '''
    ls = [1,3,9]
    print(ls.__iter__())   #<list_iterator object at 0x050B11B0> 遵循迭代器协议,转换成可迭代对象;列表可迭代对象
    
    ls = ls.__iter__()
    print(ls.__next__())  # 1
    print(ls.__next__())  # 3
    print(ls.__next__())  # 9
    #print(ls.__next__())  # StopIteration
    
    
    l = [133,3333,933]
    r = l.__iter__()
    print(next(r))
    print(next(r))
    print(next(r))
    #python 内置next()方法  其实就是在调用 r.__next__()方法
    
    
    #for循环原理
    for i in [1,2,3]: #i = i.__iter__()    i.__next__()
        print(i)

     

    
    
  • 相关阅读:
    MongoDB 释放磁盘空间 db.runCommand({repairDatabase: 1 })
    RK 调试笔记
    RK Android7.1 拨号
    RK Android7.1 移植gt9271 TP偏移
    RK Android7.1 定制化 itvbox 盒子Launcher
    RK Android7.1 双屏显示旋转方向
    RK Android7.1 设置 内存条作假
    RK Android7.1 设置 蓝牙 已断开连接
    RK Android7.1 进入Camera2 亮度会增加
    RK 3128 调触摸屏 TP GT9XX
  • 原文地址:https://www.cnblogs.com/ajaxa/p/8966824.html
Copyright © 2011-2022 走看看