迭代器也是用来遍历对象成员的,前面讨论过使用for循环遍历序列对象成员,为什么Python还要提供迭代器呢?

1、为什么要使用迭代器?

使用for循环可以遍历序列对象,列表、元组、字符串都是序列对象,序列对象都有索引,通过索引可以访问序列对象的成员。在用for循环遍历序列对象时,即可以使用序列对象的索引来遍历,也可以使用序列项来遍历,for循环使用序列项遍历对象时,就用到了迭代器。另外,Python也有不是序列对象的数据,例如集合、字典、文件等,如何遍历这些数据类型的成员呢,这也需要用到迭代器。

Python提供的迭代器是非常强大的,它不仅可以遍历序列对象,也可以遍历非序列对象,例如遍历字典的所有键,集合的所有成员等等。迭代器本身提供了一个next方法,用于获取下一个对象成员,当用next方法获取全部成员后,再次调用next方法时,会引发StopIteration异常,这个异常不是错误,只是表示迭代已完成,因此使用迭代器迭代对象成员时,需要加入异常处理语句。

2、 哪些是可迭代对象?

迭代器提供了统一的访问接口,只要实现了__iter__和__next__方法的对象,都属于可迭代对象,可以使用迭代器进行迭代访问。序列对象包括列表、元组和字符串;非序列对象包括字典、集合和文件;实现了__iter__和__next__方法的自定义对象也属于可迭代对象。

例如:

上面的代码定义了一个test类(关于Python类的知识,在后面的章节会有详细介绍),test类实现了__iter__和__next__方法,属于可迭代对象。for……in……循环语句实现对test类对象的迭代访问,首先它通过__iter__方法获得test类的迭代器,然后循环调用__next__方法获得test对象,直至test类的data属性大于5时停止迭代。

3、如何使用迭代器?

Python提供的iter()函数可以从可迭代对象中获得该对象的迭代器,然后使用迭代器的next方法获取对象。因为迭代器在迭代完所有对象成员后,会引发StopIteration异常,因此需要把迭代代码放入到try-except块中(异常处理语句,在后面的章节会有详细介绍)。

例1:查找一个词是否在给出的词组中。

词组是多个词的组合,在词组中查找一个词,查找的词为查询词。最好的处理方法就是遍历整个词组,依次与查询词进行匹配,匹配成功说明查询词出现在词组中。程序流程图如下:

图1 词查询流程图

程序一开始先用列表初始化词组,然后要求用户输入查询词,再使用迭代器迭代词组列表,在词组列表的迭代过程中,获取每个词对象,并与查询词进行匹配。若匹配成功,输出匹配成功信息并执行break语句跳出迭代,程序结束;若匹配失败则进入下一轮迭代。当迭代全部结束后,说明词组中没有与查询词相匹配的词,输出匹配失败信息,程序结束。下面给出例1的程序代码。

在Python语言,判断两字符串是否相等,可以使用“==”比较运算符进行判断,也可以使用“in”成员运算符进行判断,这两种运算符都返回布尔值,可以用在if表达式中。“==”比较运算符主要用于判断两个字符串的内容是否相等;“in”成员运算符主要用于判断两个字符串的内存地址是否相等。

try-except是Python的异常处理语句,当需要Python捕获异常代码时,需要把认为可能会出现异常的代码包括在try语句块中,在程序执行时,如果try内语句发生错误就会抛出异常,except语句会捕获异常,except语句块内的代码将会被执行,这样就可以处理异常错误了。因为迭代器在迭代完所有对象成员后,会引发StopIteration异常,因此需要把迭代代码放入到try-except块中。

上面代码的功能也可以使用for循环实现,使用for循环对词组进行迭代,操作上更为简单方便。

在for……in……循环中,序列对象列表会自动产生迭代器,并自动调用迭代器的next方法,因此不需要处理try-except语句。

例2:用字典实现图书信息表,并能通过图书的ISBN号查询到图书信息。

每本图书都有唯一的ISBN号,可以把图书的ISBN号作为图书信息表的唯一标识。题目要求用字典来实现,字典分为key和value两部分,key为键,value为键的属性,key和value是一一对应的关系。图书的ISBN可以作为字典的key,图书的其它信息可以作为字典的value,图书的其它信息包括图书名称、作者、出版社、价格,字典的value可以用Python列表来实现。程序流程图如下:

图 2 图书信息查询流程图

程序一开始先初始化图书信息字典,字典的key为图书的ISBN号,字典的value为图书的名称、作者、出版社、价格信息,value为Python列表对象。然后要求用户输入图书的ISBN号,再使用迭代器遍历字典的key,在遍历字典key的过程中,如果输入的ISBN与key匹配,则输出图书信息并执行break语句跳出迭代,程序结束。当迭代全部完成后,输出匹配失败信息,程序结束。下面给出例2的程序代码。

使用Python提供的iter函数获取字典key的迭代器,在字典key的迭代过程中,next函数返回key的值。bookDic使用“[]”访问运算符可以把key作为索引获取字典的value。

python迭代器_使用Python的迭代器遍历可迭代对象相关推荐

  1. python3迭代器和可迭代对象_一文读懂 Python3 可迭代对象、迭代器、生成器区别...

    笔者学习Python已有一段时间,一直以为对于可迭代对象(iterable).迭代器(iterator).生成器(generator)有一定理解了,直到看到<流畅的python>中的讲解才 ...

  2. python 遍历可迭代对象的方法

    python 遍历可迭代对象的方法 可迭代(iterable) 迭代(遍历)就是按照某种顺序逐个访问对象中的每一项. Python中有很多对象都是可以通过for语句来直接遍历的,例如list.stri ...

  3. 第一章 第一节:Python基础_认识Python

    Python基础入门(全套保姆级教程) 第一章 第一节:Python基础_认识Python 1. 什么是编程 通俗易懂,编程就是用代码编写程序,编写程序有很多种办法,像c语言,javaPython语言 ...

  4. python中常用的内置函数,可迭代对象,迭代器对象

    知识点1 :常用内置函数 1 常用内置函数的实际应用 1.1 abs() 返回值是一个绝对值,参数可以是整数和浮点数,如果参数是一个复数,则返回它的模. print(abs(-12.3)) # 12. ...

  5. python学习Day14 带参装饰器、可迭代对象、迭代器对象、for 迭代器工作原理、枚举对象、生成器及生成表达式...

    复习 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.返回内部函数对象---->  延迟执行, 开放封闭原则: 功能可以拓展,但源代 ...

  6. 黑马程序员python笔记_三年Python程序员平时学习笔记总结,对于学习Python非常有帮助...

    一.可迭代对象.迭代器对象和生成器 像list, tuple等这些序列是可以使用for...in ...语句来进行遍历输出的.这是为什么呢?这就需要知道可迭代对象(Iterable).迭代器对象(It ...

  7. effective python怎么样_【Python】《Effective Python》 读书笔记 (一)

    # -*- coding: utf-8 -*- from datetime import datetime from time import sleep from urllib.parse impor ...

  8. python范例_最佳Python代码范例

    python范例 Python is a general purpose programming language which is dynamically typed, interpreted, a ...

  9. python大牛_成为Python大牛必须要掌握的高端语法——yield

    成为Python大牛必须要掌握的高端语法--yield 1. 什么是yield 在介绍yield语法之前,首先要向大家说明Python中的迭代(iteration).可迭代(iterable).迭代器 ...

最新文章

  1. Study on Android【四】--显示控件使用
  2. linux开启远程访问端口
  3. javascript 学习笔记(四) 倒计时程序
  4. (小白)函数一: 声明函数的方法—语句定义法和表达式定义法的区别
  5. html div 子元素 过多 卡顿,CSS不定高元素transition动画的解决方案
  6. JAVA 从菜鸟成长为大牛的必经之路
  7. 又一个手机圈大佬确认离职!网友:圈内再无万瓷王
  8. Spring Cloud Bus消息总线(学习总结)
  9. ET1100和ET1200的区别
  10. STM32F10x_StdPeriph_Template
  11. 面试手写代码的经验分享
  12. 研究开源的C++的RTB广告系统,通过centos7镜像,解决各种环境问题,使用boost库
  13. 由某梦CMS导致近来改版的太多数据库大挪移手软了
  14. 半年时间破获电信诈骗大案:我是如何利用数据分析建模,从零基础做到的
  15. 苹果小白笔记本_【电脑】外媒评选年度办公/学生笔记本榜单 快看有你需要的吗...
  16. rtx服务器设置 文件,rtx 客户端 服务器设置 配置文件
  17. 1 Robotics: Aerial Robotics 第3+4周 课程学习记录及课后习题解答
  18. 字节跳动人事大调整,“接班”张一鸣的为什么是他?
  19. Draw.io--一款强大且支持在线编辑和导出的流程图绘制软件
  20. C++买卖股票的最佳时机(股票买卖大合集)

热门文章

  1. hiveserver2启动不起来_汽车一键启动只能用来打火吗 车主必须知道的几个“隐藏”技巧!...
  2. c语言程序设计基础的考试题,c语言程序设计基础的考试题.doc
  3. php数组超索引,php数组多维索引
  4. qt获取窗口的右上角位置_智能座舱QT应用实例 -- Mode/View
  5. 使用linux集体升级系统,一:Linux系统的升级
  6. python dataframe遍历_在pandas中遍历DataFrame行的实现方法
  7. hadoop合并日志_【hadoop】24.MapReduce-shuffle之合并
  8. android ndk 编译选项,Android NDK 对于c++的支持(mk文件内编译选项)
  9. html中如何华直角坐标系,空间直角坐标系的画法..ppt
  10. wampserver 调试 php,phpstrom+wampserver+xdebug配置