On Fri, Jan 24, 2014 at 8:50 AM, spir <denis.s...@gmail.com> wrote:
>
> xs is an iterator (__next__ is there), then Python uses it directly, thus
> what is the point of __iter__ there? In any case, python must check whether

Python doesn't check whether a type is already an iterator. It's
simpler to require that iterators implement __iter__, like any other
non-sequence iterable. This technically allows an iterator to return a
new iterator when __iter__ is called:

    class C:
        def __iter__(self): return D()
        def __next__(self): return 'C'

    class D:
        def __iter__(self): return C()
        def __next__(self): return 'D'

    it1 = iter(C())
    it2 = iter(it1)

    >>> next(it1)
    'D'
    >>> next(it2)
    'C'

That said, it's supposed to return self.
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to