• 迭代器


    迭代器

    定义

    迭代器:迭代的工具。迭代是更新换代,如你爷爷生了你爹,你爹生了你,迭代也可以说成是重复,并且但每一次的重复都是基于上一次的结果来的。

    可迭代对象

    python中,一切皆对象:

    x = 1
    name = 'nick'
    lis = [1, 2]
    tup = (1, 2)
    dic = {'name': 'nick'}
    s1 = {'a', 'b'}
    f = open('49w.txt', 'w', encoding='utf-8)
             
    def func():
        pass
    

    对于这一切的对象中,但凡有__iter__方法的对象,都是可迭代对象。

    # 以下都是可迭代的对象
    
    name = 'nick'.__iter__
    lis = [1, 2].__iter__
    tup = (1, 2).__iter__
    dic = {'name': 'nick'}.__iter__
    s1 = {'a', 'b'}.__iter__
    f = open('49w.txt', 'w', encoding='utf-8')
    f.__iter__
    

    可迭代的对象:Python内置str、list、tuple、dict、set、file都是可迭代对象。

    特点:内置有__iter__方法的都叫可迭代的对象。

    迭代器对象

    只有字符串和列表都是依赖索引取值的,而其他的可迭代对象都是无法依赖索引取值的。因此我们得找到一个方法能让其他的可迭代对象不依赖索引取值。

    在找到该方法前,首先我们给出迭代器对象的概念:可迭代的对象执行__iter__方法得到的返回值。并且可迭代对象会有一个__next__方法。

    # 不依赖索引的数据类型迭代取值
    dic = {'a': 1, 'b': 2, 'c': 3}
    iter_dic = dic.__iter__()
    print(iter_dic.__next__())
    print(iter_dic.__next__())
    print(iter_dic.__next__())
    # print(iter_dic.__next__())  # StopIteration:
    """
    a
    b
    c
    """
    
    # 依赖索引的数据类型迭代取值
    lis = [1, 2, 3]
    iter_lis = lis.__iter__()
    print(iter_lis.__next__())
    print(iter_lis.__next__())
    print(iter_lis.__next__())
    # print(iter_lis.__next__())  # StopIteration:
    '''
    1
    2
    3
    '''
    

    for循环原理

    for 循环就是利用可迭代对象进行while循环+try...except实现的

    1. 首先使用iter把lt变成迭代器对象;对于文件也要使用iter方法吧文件再一次iter下
    2. 然后使用next方法进行迭代取值
    3. 判断StopIteration异常,遇到异常终止

    例如:

    lt = [1,2,3]
    for i in lt:
        print(i)
    
    lt_iter = lt.__iter__()
    while 1:
        try:
            print(lt_iter.__next__())
        except StopIteration:
            break
    

    扩展-iter可当作内置方法来使用,但尽量使用_iter_

    dic ={'a':1,'b':2}
    dic_iter = iter(dic)
    print(next(dic_iter))
    print(next(dic_iter))
    
  • 相关阅读:
    Ubuntu Linux下的Wireshark使用drcom_2011.lua分析drcom协议
    Keil提示premature end of file错误 无法生成HEX文件
    Linux和win7(win10)双系统时间错误问题 时间相差8小时
    Wireshark使用drcom_2011.lua插件协助分析drcom协议
    Keil报错failed to execute 'd:KeilC51BINC51.EXE'
    第一篇博文
    LG 7078 贪吃蛇
    LG 1791 人员雇佣
    洛谷 2698 Flowerpot
    HDU 5965 扫雷
  • 原文地址:https://www.cnblogs.com/dadazunzhe/p/11340918.html
Copyright © 2020-2023  润新知