手动遍历迭代器

问题

你想遍历一个可迭代对象中的所有元素,但是却不想使用 for 循环。

解法

为了手动的遍历可迭代对象,使用 next() 函数并在代码中捕获 StopIteration 异常。比如,下面的例子手动读取一个文件中的所有行:

def manual_iter():with open('/etc/passwd') as f:try:while True:line = next(f)print(line, end='')except StopIteration:pass

通常来讲, StopIteration 用来指示迭代的结尾。然而,如果你手动使用上面演示的 next() 函数的话,你还可以通过返回一个指定值来标记结尾,比如 None 。下面是示例:

with open('/etc/passwd') as f:while True:line = next(f, None)if line is None:breakprint(line, end='')

讨论

大多数情况下,我们会使用 for 循环语句用来遍历一个可迭代对象。但是,偶尔也需要对迭代做更加精确的控制,这时候了解底层迭代机制就显得尤为重要了。

>>> items = [1, 2, 3]
>>> # Get the iterator
>>> it = iter(items) # Invokes items.__iter__()
>>> # Run the iterator
>>> next(it) # Invokes it.__next__()
1
>>> next(it)
2
>>> next(it)
3
>>> next(it)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
StopIteration
>>>

《Python Cookbook 3rd》笔记(4.1):手动遍历迭代器相关推荐

  1. 《Python Cookbook 3rd》笔记汇总

    文章目录 一.数据结构 二.字符串和文本 三.数字.日期和时间 四.迭代器与生成器 五.文件与IO 一.数据结构 标题 关键词 1.1:拆分序列后赋值给多个变量 可迭代对象.拆分赋值 1.2:拆分任意 ...

  2. 《Python Cookbook 3rd》笔记(1.4):查找最大或最小的N个元素

    <Python Cookbook 3rd>1.4:查找最大或最小的N个元素 问题 怎样从一个集合中获得最大或者最小的N个元素列表? 解法 heapq 模块有两个函数:nlargest()和 ...

  3. Python Cookbook 3rd Edition Documentation

    Python Cookbook 3rd Edition Documentation 文章目录 第一章:数据结构和算法 1.1 解压序列赋值给多个变量 问题 解决方案 讨论 1.2 解压可迭代对象赋值给 ...

  4. 《Python cookbook》笔记二

    <Python cookbook>笔记二 第二章 字符串和文本 -使用多个界定符分割字符串- 你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定 的. # str ...

  5. Machine Learning with Python Cookbook 学习笔记 第8章

    Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...

  6. Machine Learning with Python Cookbook 学习笔记 第6章

    Chapter 6. Handling Text 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放在代码压缩 ...

  7. Machine Learning with Python Cookbook 学习笔记 第9章

    Chapter 9. Dimensionality Reduction Using Feature Extraction 前言 本笔记是针对人工智能典型算法的课程中Machine Learning w ...

  8. 《Python cookbook》笔记一

    <Python cookbook> 第一章 数据结构和算法 - *号解压多个变量 - 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError .那么 怎样才能从这个可 ...

  9. 《Python Cookbook 3rd》笔记(2.19):实现一个简单的递归下降分析器

    实现一个简单的递归下降分析器 问题 你想根据一组语法规则解析文本并执行命令,或者构造一个代表输入的抽象语法树.如果语法非常简单,你可以自己写这个解析器,而不是使用一些框架. 解法 在这个问题中,我们集 ...

最新文章

  1. 蚂蚁森林合种计划(2020.11.14,7天有效,每周6更新)
  2. go语言中fmt包中Print、Printf、Println输出相关函数的区别
  3. AI对人类社会的真正威胁
  4. SAP PM 初级系列1 – 定义维护工厂和维护计划工厂
  5. 深圳大学梁臻博士提出EEGFuseNet高维脑电图混合无监督深度特征表征与融合模型及其在情绪识别中的应用...
  6. 写爬虫,不会正则怎么行?
  7. EntityFramework 动态构造排序 FuncIQueryableT, IOrderedQueryableT Dynamic
  8. 论文浅尝 | 基于RNN与相似矩阵CNN的知识库问答
  9. DataQ数据对象为空的解决方法
  10. 【转载】COM 组件设计与应用(二)——GUID 和 接口
  11. 南宁计算机职业学校地址,南宁市第三职业技术学校
  12. Linux之LIBRARY_PATH与LD_LIBRARY_PATH配置多个目录用法
  13. ios swift学习日记4-字符串和字符
  14. Sql server 2008
  15. 百度商桥点击咨询自定义按钮
  16. Android中隐藏屏幕键盘的方法
  17. 9个设计师都在用的图片素材网站,风格齐全,高清免费
  18. 软件测试实验——编写测试用例
  19. 直播软件打开测试频道,对比评测:看地方台,这三个直播软件不要错过
  20. 实体间的联系存在着( )_医药零售的网络销售与实体渠道如何协同

热门文章

  1. 神经网络与深度学习——TensorFlow2.0实战(笔记)(三)(第一个Python程序)
  2. 【转】DHF、DMR、MDF、DHR医疗器械文件要求与解读
  3. Dynamics CRM 2016 安装
  4. SharePoint关于publish page, WiKi page, Web part page区别
  5. entity framework6 edmx文件详解
  6. TFS创建团队项目(三)
  7. 一步步编写操作系统 29 cpu缓存简介
  8. 排序集锦(各种排序算法的特点及性能分析)
  9. 空间注意力机制sam_Attention注意力机制介绍
  10. centos7安装flink集群_《从0到1学习Flink》—— Flink 写入数据到 Kafka