《Python Cookbook 3rd》笔记(4.16):迭代器代替 while 无限循环
迭代器代替 while 无限循环
问题
你在代码中使用 while 循环来迭代处理数据,因为它需要调用某个函数或者和一般迭代模式不同的测试条件。能不能用迭代器来重写这个循环呢?
解法
一个常见的 IO 操作程序可能会想下面这样:
CHUNKSIZE = 8192
def reader(s):while True:data = s.recv(CHUNKSIZE)if data == b'':breakprocess_data(data)
这种代码通常可以使用 iter() 来代替,如下所示:
def reader2(s):for chunk in iter(lambda: s.recv(CHUNKSIZE), b''):pass# process_data(data)
如果你怀疑它到底能不能正常工作,可以试验下一个简单的例子。比如:
>>> import sys
>>> f = open('/etc/passwd')
>>> for chunk in iter(lambda: f.read(10), ''):
... n = sys.stdout.write(chunk)
...
nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
_uucp:*:4:4:Unix to Unix Copy Protocol:/var/spool/uucp:/usr/sbin/uucico
...
>>>
讨论
iter 函数一个鲜为人知的特性是它接受一个可选的 callable 对象和一个标记 (结尾) 值作为输入参数。当以这种方式使用的时候,它会创建一个迭代器,这个迭代器会不断调用 callable 对象直到返回值和标记值相等为止。
这种特殊的方法对于一些特定的会被重复调用的函数很有效果,比如涉及到 I/O调用的函数。举例来讲,如果你想从套接字或文件中以数据块的方式读取数据,通常你得要不断重复的执行 read() 或 recv() ,并在后面紧跟一个文件结尾测试来决定是否终止。这节中的方案使用一个简单的 iter() 调用就可以将两者结合起来了。其中lambda 函数参数是为了创建一个无参的 callable 对象,并为 recv 或 read() 方法提供了 size 参数。
《Python Cookbook 3rd》笔记(4.16):迭代器代替 while 无限循环相关推荐
- 《Python Cookbook 3rd》笔记(1.4):查找最大或最小的N个元素
<Python Cookbook 3rd>1.4:查找最大或最小的N个元素 问题 怎样从一个集合中获得最大或者最小的N个元素列表? 解法 heapq 模块有两个函数:nlargest()和 ...
- 《Python Cookbook 3rd》笔记汇总
文章目录 一.数据结构 二.字符串和文本 三.数字.日期和时间 四.迭代器与生成器 五.文件与IO 一.数据结构 标题 关键词 1.1:拆分序列后赋值给多个变量 可迭代对象.拆分赋值 1.2:拆分任意 ...
- Python Cookbook 3rd Edition Documentation
Python Cookbook 3rd Edition Documentation 文章目录 第一章:数据结构和算法 1.1 解压序列赋值给多个变量 问题 解决方案 讨论 1.2 解压可迭代对象赋值给 ...
- 《Python cookbook》笔记二
<Python cookbook>笔记二 第二章 字符串和文本 -使用多个界定符分割字符串- 你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定 的. # str ...
- Machine Learning with Python Cookbook 学习笔记 第8章
Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...
- Machine Learning with Python Cookbook 学习笔记 第9章
Chapter 9. Dimensionality Reduction Using Feature Extraction 前言 本笔记是针对人工智能典型算法的课程中Machine Learning w ...
- Machine Learning with Python Cookbook 学习笔记 第6章
Chapter 6. Handling Text 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放在代码压缩 ...
- 《Python cookbook》笔记一
<Python cookbook> 第一章 数据结构和算法 - *号解压多个变量 - 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError .那么 怎样才能从这个可 ...
- 《Python Cookbook 3rd》笔记(4.7):迭代器切片
迭代器切片 问题 你想得到一个由迭代器生成的切片对象,但是标准切片操作并不能做到. 解法 函数 itertools.islice() 正好适用于在迭代器和生成器上做切片操作.比如: >>& ...
最新文章
- 一个丧心病狂的Github项目:东北话编程,大写的服!
- 一家全是学霸!王力宏的哥哥也是博士,近日获5000余万拨款用于这项研究
- playframework学习笔记1 -- 开发环境和第一个工程
- python垃圾分类源代码_Python学习:怕乱丢垃圾罚款?使用 Python 轻松完成垃圾分类...
- Python极简入门:数据类型、条件语句、循环语句、异常处理
- 局域网网络风暴检测工具_二层网络结构和三层网络结构的对比
- Silverlight 应用 WCF RIA Services 在 IIS6 部署问题总结
- 十年总结,一个JAVA人的十年人生路
- 动态规划-01背包问题详解
- 二叉搜索树(BST树)的简单实现
- 服务器预装操作系统,服务器预装操作系统吧
- 记录远程桌面登录者的IP和MAC
- 论坛模板php,php论坛
- springboot 整合 mvc 配置外部静态资源
- image 第二次使用就出错是怎么回事_第二次上机报告-RNA-seq (HISAT - SAMtools- StringTie - ballgown)amp;amp;Gene-Assembly
- 主板找不到SSD解决一例
- 机器学习之网格搜索(GridSearch)及参数说明,实例演示
- PHP完全自学手册01.pdf
- 海思3518E开发笔记1.2——海思SDK脚本学习
- windows无法连接到某个wifi_笔记本电脑连接wifi时一直显示“windows无法连接到。。(wifi)”是怎么回事...
热门文章
- 《计算机应用》实践考核,《管理系统中计算机应用》实践性环节考核方案
- 在哪个Linux发行版上运行python,怎么在linux上运行python
- python gif_python 将png图片格式转换生成gif动画
- 根据rtk参数在arcgis中进行可视化
- 一步步编写操作系统 26 打开A20地址线
- opencv获取图片像素坐标_利用OpenCV从图片中提取矩形并标注坐标(室内平面地图)(一)
- Qt undefined reference to,Error 255,找不到库函数的解决办法
- Python3 爬虫实战 — 模拟登陆哔哩哔哩【滑动验证码对抗】
- 玩转Mybatis —— 一个小demo,带你快速入门Mybatis
- bat 脚本清空窗口内容_tomcat9.0启动脚本startup.bat的分析