gpt4 book ai didi

python - Python 迭代器是否正式需要 __iter__ 方法?

转载 作者:行者123 更新时间:2023-12-03 16:35:19 25 4
gpt4 key购买 nike

网上的几个地方,包括 Stack Overflow 中的答案(例如 thisthisthis ),都提到 Python 迭代器必须同时实现 __next__方法(我理解)和 __iter__方法。这些地方正确地得出结论,所有迭代器也是可迭代的。如果注释为 typing.Iterator 的变量,即使 PyCharm 也会发出类型警告。没有实现 __iter__方法。

与这些相反,official Python tutorial section on iterators只提到需要 __next__方法:

The function returns an iterator object that defines the method __next__() which accesses elements in the container one at a time



所以我的问题是:Python 迭代器是否正式需要自己成为可迭代对象?我个人不明白为什么这应该是真的,以及为什么我们不能完全分离 Iterable 的要求。和一个 Iterator .

最佳答案

这就是教程。它掩盖了事物。如果您查看 data model documentation ,你会看到一个明确的要求,即迭代器支持 __iter__ :

The iterator objects themselves are required to support the following two methods, which together form the iterator protocol:

iterator.__iter__()

Return the iterator object itself. This is required to allow both containers and iterators to be used with the for and in statements. This method corresponds to the tp_iter slot of the type structure for Python objects in the Python/C API.

iterator.__next__()

...


Python 很容易被设计为使迭代器不可迭代,就像 Java 所做的那样,但这会适得其反。迭代迭代器在 Python 中非常普遍和标准,而且一直都是如此。
必须坚持某种方式 iterwrapper每个 for 中的迭代器循环就像必须坚持某种 addablewrapper每次你想添加两个整数时,围绕你的整数。

关于python - Python 迭代器是否正式需要 __iter__ 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61676807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com