【发布时间】:2018-02-16 18:28:57
【问题描述】:
我发现:
>>> a={'x':42, 'y':3.14, 'z':7}
>>> b=a.__iter__()
>>> b.__dir__()
['__next__', ..., '__iter__', ...]
>>> b
<set_iterator object at 0x7efdd4e5afc0>
迭代器总是有__iter__ 方法吗?
根据https://stackoverflow.com/a/9884259,一个迭代器也是一个可迭代对象。如果迭代器总是有__iter__ 方法是真的?
【问题讨论】:
-
是的,它总是这样。它应该返回
self。 -
说真的,请查看this gist。我认为它应该消除一些关于 for 循环、什么是迭代器以及什么是可迭代的混淆。
-
我认为值得注意的是,有时人们关于迭代器和可迭代对象的语言与实际协议细节相反。也就是说,如果有人说“X 是可迭代的”,他们可能打算排除迭代器(尽管迭代器总是具有
__iter__方法,因此在官方意义上是可迭代的)。 “非迭代器可迭代”没有好的单字术语,所以有些人只是使用“可迭代”来表示,即使它不准确。我在a previous answer 中详细阐述了这个主题。
标签: python python-3.x methods iterator iterable