some_dict.items() 是 Python 中的迭代器吗?

E.H*_*ine 7 python dictionary iterator iterable python-3.x

我对迭代器和可迭代之间的区别有点困惑。我读了很多书,得到了这么多:

\n\n

Iterator__next__ :一个包含it\xe2\x80\x99s 类的对象。您可以对其调用 next() 。所有迭代器都是可迭代的。

\n\n

Iterable__iter__ :定义或__getitem__在其类中的对象。如果某个东西可以使用 iter() 构建迭代器,那么它就是可迭代的。并非所有可迭代对象都是迭代器。

\n\n

some_dict.items()迭代器吗?我知道some_dict.iteritems()Python2 中会这样,对吗?

\n\n

我只是检查一下,因为我正在做的一门课程说它是,而且我很确定它只是一个可迭代的(不是迭代器)。

\n\n

感谢您的帮助 :)

\n

jua*_*aga 7

不,不是。它是字典中项目的可迭代视图:

>>> next({}.items())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'dict_items' object is not an iterator
>>>
Run Code Online (Sandbox Code Playgroud)

它的__iter__方法返回一个专门的迭代器实例:

>>> iter({}.items())
<dict_itemiterator object at 0x10478c1d8>
>>>
Run Code Online (Sandbox Code Playgroud)