美文网首页
Python迭代器

Python迭代器

作者: 断尾壁虎V | 来源:发表于2017-11-27 18:22 被阅读0次

    迭代是一个重复的过程,每一次重复,都是基于上一次的结果而来。
    迭代器的作用:主要用于去除序列类型中的值
    可迭代对象:凡是对象有iter方法: 对象.iter,该对象就是可以迭代对象。包括字典,集合等。
    使用iter方法后,可迭代对象就成为一个迭代器对象。使用迭代器对象对无序列的元素取值:

    l={'ad':1,'b':2}
    i=iter(l)
    print(next(i))
    print(next(i))
    
    s={1,2,3,4}
    i=iter(s)
    print(next(i))
    print(next(i))
    print(next(i))
    print(next(i))
    

    使用迭代对象不仅能对非序列元素进行操作,也可以对序列元素如字符串,列表元组等进行操作。

    迭代器的特点
    • 可迭代对象通过iter可以得到迭代器对象。
    • 迭代器对象由iter方法,执行得到的仍然是迭代器本身。
    • 可迭代对象有iter方法。
    • 迭代器对象有iter方法,还有next方法。
    • 迭代器对象使用next,可以得到下一个值
    • 文件是迭代器对象,字符串,列表,元组,字典,集合都是可迭代对象。
    from collections import Iterable,Iterator
    s='python'
    l=['a','b','c']
    t=('a','b','c')
    dic={'a':1,'b':2}
    set1={1,2,3,4}
    f=open('a.txt')
    
    print(isinstance(s,Iterable))
    print(isinstance(l,Iterable))
    print(isinstance(t,Iterable))
    print(isinstance(dic,Iterable))
    print(isinstance(set1,Iterable))
    print(isinstance(f,Iterable))
    

    输出结果: 文件,字符串,列表,元组,字典,集合都是可迭代对象。
    True
    True
    True
    True
    True
    True

    迭代器对象:

    from collections import Iterable,Iterator
    s='python'
    l=['a','b','c']
    t=('a','b','c')
    dic={'a':1,'b':2}
    set1={1,2,3,4}
    f=open('a.txt')
    
    print(isinstance(s,Iterator))
    print(isinstance(l,Iterator))
    print(isinstance(t,Iterator))
    print(isinstance(dic,Iterator))
    print(isinstance(set1,Iterator))
    print(isinstance(f,Iterator))
    

    输出结果: 文件是迭代器对象,其他的都是可迭代对象。
    False
    False
    False
    False
    False
    True

    迭代器对象的优点
    • 迭代器提供了一种统一的(不依赖于索引的)迭代方式
    • 迭代器本身,比其他的数据类型更省内存
    • 文件也是一个迭代器对象
    迭代器的缺点
    • 一次性,只能往后走,不能回退,不如索引取值灵活。
    • 无法预知什么时候取值结束,既无法预知长度。
    for 循环的原理

    for 循环就是利用的迭代器的原理,对传入的可迭代对象使用__iter__方法,然后再对生成的迭代器对象执行__next__方法。如对文件的操作:

    with open('a.txt','r',encoding='utf-8') as f:
        for line in f:
            print(line)
    

    代码等同于:

    with open('a.txt','r',encoding='utf-8') as f:
        f1=f.__iter__() 
        try:          # 执行多个next,使用异常捕获
            f2=f1.__next__()
            print(f2)
        except Exception as err:
            exit(0)
        try:
            f2=f1.__next__()
            print(f2)
        except Exception as err:
            exit(0)
        try:
            f2=f1.__next__()
            print(f2)
        except Exception as err:
            exit(0)
        ...
    
    

    相关文章

      网友评论

          本文标题:Python迭代器

          本文链接:https://www.haomeiwen.com/subject/vildbxtx.html