[Tutor] Iterator vs. iterable cheatsheet, was Re: iter class

spir denis.spir at gmail.com
Sat Jan 25 08:49:51 CET 2014


On 01/25/2014 04:13 AM, eryksun wrote:
> On Fri, Jan 24, 2014 at 8:50 AM, spir <denis.spir at 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.

All right, thank you, Peter & Eryksun.

d



More information about the Tutor mailing list