首页 > 后端开发 > Python教程 > 解释 Python 中的 Iterable 与 Iterator

解释 Python 中的 Iterable 与 Iterator

Susan Sarandon
发布: 2025-01-01 07:42:18
原创
784 人浏览过

Explaining Iterable vs Iterator in Python

此页面的目的是演示 2 个迭代协议的动态:

  1. 可迭代
  2. 迭代器

1. 但首先(添加令人困惑的相似单词),让我们解决迭代问题

  • 迭代 - 当然 - 是从源中逐项获取项目并依次对每个项目执行某些操作
  • 在Python中,这常用在
    • a) for/while 循环和
    • b) 理解
  • 默认情况下 - 这些结构迭代整个结构
  • 然而,有时可能需要更细粒度的控制 - 就像在生成器
  • 为此,有 2 个重要的概念/协议,Python 的大部分都是在它们之上构建的:
  • a) 可迭代对象
  • b) 迭代器对象
  • 两者都反映在标准Python协议中
  • 这不是额外的东西:实际上,for/while 循环和推导式直接构建在迭代协议的这些较低级别元素上

2. ITER() 方法从可迭代对象创建迭代器

  • 可迭代对象(对象的集合或流)是可以传递到内置 iter() 函数的任何对象
  • 一旦传递了内置的 iter() 函数,它就会返回一个传递类型的 迭代器对象,即创建一个字符串迭代器
>>> example_iterator = iter('abc')
>>> example_iterator
<str_iterator object at 0x063DCE38>
登录后复制
登录后复制
  • 请注意,迭代器是一个隐式序列对象,提供顺序(不是随机!)对底层顺序数据集的访问
  • 例如范围对象本身不是迭代器
  • 迭代器不允许访问底层序列的任意元素
  • 它们仅提供对系列下一个元素的访问
  • 它们提供顺序访问
<!-- THIS IS NOT AN ITERATOR -->
>>> r = range(10)[5]
>>> r
5
登录后复制
登录后复制

3. NEXT() 函数从迭代器返回下一个值

  • 内置的 next() 需要一个 迭代器 对象 - 它返回集合迭代中的下一个值
  • 迭代器由 2 个组件组成:
  • 检索集合的下一个元素的机制
  • 表示系列结束的机制

在具有内置对象系统的编程语言中,这种抽象通常对应于可以由类实现的特定接口

  • next() 允许按要求依次考虑每个项目 - 而不是从开始到结束的整个系列
  • 有2个消息迭代器接口包括
    • 下一个 → 查询下一个元素
    • iter → 返回迭代器
  • 约束:迭代器只能迭代一次

4. 课堂示例 - 从可迭代到迭代器再到停止迭代异常

  • Python 会随意引发 StopIteration 类型的 异常
>>> example_iterator = iter('abc')
>>> example_iterator
<str_iterator object at 0x063DCE38>
登录后复制
登录后复制

5. 实际示例 - 对多个命令行输入进行单元测试

  1. 定义/获取可迭代对象,例如列表 ["20.01", "y"]
  2. 将可迭代对象传递给 iter() → 创建迭代器对象
  3. 将迭代器对象传递到 next() 中,以便每次在代码中调用输入函数时生成列表的下一个值
<!-- THIS IS NOT AN ITERATOR -->
>>> r = range(10)[5]
>>> r
5
登录后复制
登录后复制
  • 第一次遇到input()时,传递的是“20.01”值,
  • 第二次是“y”
  • 第三次就例外了

6. 链接

  • https://mypy.readthedocs.io/en/stable/protocols.html#iteration-protocols
  • 5.2 隐式序列 - Python 中的 SICP

以上是解释 Python 中的 Iterable 与 Iterator的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板