0

0

Python基础:iter函数的两个参数

尊渡假赌尊渡假赌尊渡假赌

尊渡假赌尊渡假赌尊渡假赌

发布时间:2025-12-04 21:31:02

|

225人浏览过

|

来源于php中文网

原创

iter(callable, sentinel)反复调用callable直至其返回值==sentinel,此时停止迭代且不包含哨兵;callable须为无参可调用对象,常用于流式读取如iter(f.readline, '')或iter(input, 'quit')。

python基础:iter函数的两个参数

Python 中的 iter() 函数通常接收一个参数(可迭代对象),但其实它支持**两个参数的用法**:第一个是**可调用对象(callable)**,第二个是**哨兵值(sentinel)**。这种用法常用于按需读取流式数据(比如文件、网络响应或自定义生成逻辑),直到遇到特定值为止。

两个参数的 iter 是怎么工作的?

当传入两个参数时,iter(callable, sentinel) 会反复调用 callable(),直到其返回值等于 sentinel(注意:用 == 比较,不是 is),此时迭代停止,不包含哨兵值本身。

关键要求:
- 第一个参数必须是**无参 callable**(如函数、lambda、方法绑定等);
- 每次调用它应返回一个值;
- 第二个参数是用于终止的“结束标记”。

典型应用场景:逐行读文件直到空行

比如读取一个配置文件,只处理到第一个空行为止:

with open('config.txt') as f:
    for line in iter(f.readline, ''):
        if line.strip() == '':
            break
        print(line.rstrip())

这里 f.readline 是无参 callable,'' 是哨兵(readline 遇到文件末尾也返回 '')。不过更常见的是用非空哨兵,例如:

魔法映像企业网站管理系统
魔法映像企业网站管理系统

技术上面应用了三层结构,AJAX框架,URL重写等基础的开发。并用了动软的代码生成器及数据访问类,加进了一些自己用到的小功能,算是整理了一些自己的操作类。系统设计上面说不出用什么模式,大体设计是后台分两级分类,设置好一级之后,再设置二级并选择栏目类型,如内容,列表,上传文件,新窗口等。这样就可以生成无限多个二级分类,也就是网站栏目。对于扩展性来说,如果有新的需求可以直接加一个栏目类型并新加功能操作

下载

立即学习Python免费学习笔记(深入)”;

  • 读取用户输入直到输入 'quit'iter(input, 'quit')(注意 Python 3 中 input 是函数)
  • 从队列中持续取值直到收到 Noneiter(queue.get, None)(需确保队列不阻塞,或配合 timeout)

注意事项和常见错误

容易出错的地方:

  • 第一个参数带括号就错了,比如 iter(f.readline(), sentinel) —— 这会立即执行并传入返回值,不是 callable
  • callable 每次必须能被安全调用;如果抛异常,迭代直接中断(不会捕获)
  • 哨兵值必须是可比较的;若 callable 返回自定义对象,需实现 __eq__
  • 无法用于已知长度的容器(如 list、tuple),因为它们不是 callable

本质上,双参数 iter 提供了一种简洁的“条件循环迭代”语法,把 while 循环 + break 的逻辑封装成迭代器,方便配合 for、itertools 或生成器表达式使用。不复杂但容易忽略。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

106

2023.09.25

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

120

2025.10.15

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

261

2025.10.24

lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

215

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

192

2025.11.08

Python lambda详解
Python lambda详解

本专题整合了Python lambda函数相关教程,阅读下面的文章了解更多详细内容。

61

2026.01.05

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

197

2023.11.24

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

9

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

22

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Rust 教程
Rust 教程

共28课时 | 6.8万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

JavaScript
JavaScript

共185课时 | 32.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号