代码之家  ›  专栏  ›  技术社区  ›  M.Taki_Eddine

关于内置iter__

  •  0
  • M.Taki_Eddine  · 技术社区  · 7 年前

    我正在学习python并阅读流畅的python书籍! 在执行某些类实现时,我停了下来,看到以下代码片段:

    def __iter__(self):
        return iter(self._components)
    

    具有 components 作为一个浮点数组,我的问题是:为什么要调用 iter() 方法,尽管它已经是一个iterable?。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Antti Haapala -- Слава Україні    7 年前

    documentation doesn't make it very clear ,这是因为 __iter__ 必须 (不是 应该 )返回an 迭代器 ,而不是 可迭代的 :

    % python
    Python 3.6.3 (default, Oct  3 2017, 21:45:48) 
    [GCC 7.2.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> class Foo:
    ...     def __iter__(self):
    ...         return []
    ... 
    >>> iter(Foo())
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: iter() returned non-iterator of type 'list'