当前位置: 首页 > 面试题库 >

Python的迭代器协议到底是什么?

孙宏壮
2023-03-14
问题内容

有客观定义吗?它是作为python源代码的一部分实现的吗?如果是这样,有人可以产生确切的代码行吗?是否所有语言都有自己的“ for”语句迭代器协议?


问题答案:

它位于这里的文档:

需要为容器对象定义一种方法以提供迭代支持:

container.__iter__()

返回一个迭代器对象。需要该对象支持以下所述的迭代器协议。如果容器支持不同类型的迭代,则可以提供其他方法来专门请求那些迭代类型的迭代器。(支持多种形式的迭代的对象的示例可能是同时支持广度优先和深度优先遍历的树结构。)此方法对应tp_iter于Python
/ C API中Python对象的类型结构的插槽。

需要迭代器对象本身支持以下两种方法,它们共同构成了迭代器协议:

iterator.__iter__()

返回迭代器对象本身。这是必需的,以允许容器和迭代器与for和in语句一起使用。此方法对应tp_iter于Python / C
API中Python对象的类型结构的插槽。

iterator.__next__()

从容器返回下一个项目。如果没有其他项目,请引发StopIteration异常。此方法对应tp_iternext于Python / C
API中Python对象的类型结构的插槽。



 类似资料:
  • 问题内容: Python中的最基本定义是什么? 我已经阅读了多个定义,但是我无法确定确切的含义,因为它仍然不会陷入。 有人可以在外行方面为我提供3个定义的帮助吗? 问题答案: 迭代是一个通用的术语,用于一个接一个地获取某物的每一项。无论何时使用显式或隐式循环遍历一组项,即迭代。 在Python中,和有特定的含义。 是一个具有返回迭代器的iter方法的对象,或者定义一个可以从零开始获取顺序索引的方法

  • 问题 你想构建一个能支持迭代操作的自定义对象,并希望找到一个能实现迭代协议的简单方法。 解决方案 目前为止,在一个对象上实现迭代最简单的方式是使用一个生成器函数。 在4.2小节中,使用Node类来表示树形数据结构。你可能想实现一个以深度优先方式遍历树形节点的生成器。 下面是代码示例: class Node: def __init__(self, value): self._

  • 本文向大家介绍迭代器 Iterator 是什么?相关面试题,主要包含被问及迭代器 Iterator 是什么?时的应答技巧和注意事项,需要的朋友参考一下 terator 接口提供遍历任何 Collection 的接口。我们可以从一个 Collection 中使用迭代器方法来获取迭代器实例。迭代器取代了 Java 集合框架中的 Enumeration,迭代器允许调用者在迭代过程中移除元素。

  • 问题内容: 解释了如何解决创建is 的问题。 本质上,有两种方法: 使用关键字: 使用关键字: 我正在尝试进行一些研究,以了解这两种方法之间的确切区别。该文档非常清楚有关使用: 为了在Objective-C中可访问和使用,Swift类必须是Objective-C类的后代,或者必须将其标记为。 但是,在任何地方我都找不到有关实际操作的信息。详细考虑整个概念,实际上并没有多大意义。我的理解是,这是Sw

  • 问题内容: 我不知道如何工作。 文档中有一些解释。例如,它们的意思是: 带有最终估算器的变换管线。 为了使我的问题更清楚,什么是?它们如何工作? 编辑 由于有了答案,我可以使我的问题更清楚: 当我调用管道并通过时,需要两个转换器和一个估计器,例如: 我叫这个怎么办? 我不知道估算器如何成为变压器以及如何装配变压器。 问题答案: *scikit-learn中的 *Transformer- 一些具有f

  • 本文向大家介绍Python迭代器协议及for循环工作机制详解,包括了Python迭代器协议及for循环工作机制详解的使用技巧和注意事项,需要的朋友参考一下 一、递归与迭代 二、什么是迭代器协议 1、迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stopiteration异常,已终止迭代(只能往后走不能往前退) 2、可迭代对象:实现了迭代器协议的对象(