美文网首页程序员
python 迭代器详述

python 迭代器详述

作者: 洛丽塔的云裳 | 来源:发表于2019-12-14 20:05 被阅读0次

    1. 迭代器定义

    迭代器就是有一个next()方法的对象,而不是通过索引来计数。当你或是一个循环机制需要下一个项时,调用迭代器的next()方法就可以获得它。

    注: 当条目全部取出后,会引发一个StopIteration异常,但并不表示错误发生,只是告诉外部调用者,迭代完成。

    迭代器的限制:你不能向后移动,不能回到开始。也不能复制一个迭代器。如果你要再次迭代同一个对象,你只能去创建另一个迭代器对象。

    2. 迭代器定义

    序列

    revesed()内建函数将返回一个反序访问的迭代器
    enumerate()内建函数同样也返回迭代器

    # -*- coding: utf-8 -*-
    
    def main():
        """ 测试迭代器 """
        test = (123, 'xyz', 45.67)
        fetch = iter(test)
        while True:
            try:
                i = fetch.next()
            except StopIteration:
                break
            print "执行其他部分"
    
    if __name__ == '__main__':
        main()
    

    测试结果:


    需要说明的是tuple的迭代器类型是<type 'tupleiterator'>, list的迭代器类型是<type 'listiterator'>

    字典

    字典的迭代器会遍历它的key,语句for eachKey in myDict。python还引进了三个新的内建方法来定义迭代:myDict.iterkeys()通过键迭代, myDict.itervalues通过值迭代, myDict.iteriterms通过键值迭代

    # -*- coding: utf-8 -*-
    
    def main():
        """ 测试迭代器 """
        infos = {
             'Mr.chen': 60,
             'Mr.wu': 70,
        }
        for eachinfo in infos:
            print type(eachinfo), " the current info is ", eachinfo
            
        print "****** now use iterkeys *****"
        for eachkey in infos.iterkeys():
            print type(eachkey), " the current info is ", eachinfo
    
        print "****** now use itervalues *****"
        for eachkey in infos.itervalues():
            print type(eachkey), " the current info is ", eachinfo
    
        print "****** now use iteritems *****"
        for eachkey in infos.iteritems():
            print type(eachkey), " the current info is ", eachinfo
    
    if __name__ == '__main__':
        main()
    

    测试结果:


    需要说明的是iterkeys的类型是字典中key的类型, itervalues类型是字典中value的类型, iteriterms的类型是字典中key的类型

    文件

    文件对象生成的迭代器会自动调用readline()方法, 循环就可以访问文本文件的所有行。可以用 for eachline in myfile替换 for eachline in myfile.readlines()

    def main():
        """ 测试迭代器 """
        myfile = open('test.txt')
        for eachline in myfile:
            print type(eachline), eachline
    
    if __name__ == '__main__':
        main()
    

    可变对象和迭代器

    禁止在迭代可变对象的时候修改它们。一个序列的迭代器只是记录你当前到达第多少个元素,所以如果你在迭代时改变了元素,更新会立即反映到你所在迭代的条目上

    def main():
        """ 测试迭代器 """
        infos = {
             'Mr.chen': 60,
             'Mr.wu': 70,
        }
        for eachkey in infos:
            print eachkey, infos['eachkey']
            del infos[eachkey]
    
    if __name__ == '__main__':
        main()
    

    测试结果


    相关文章

      网友评论

        本文标题:python 迭代器详述

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