On Sun, Nov 28, 2021 at 09:33:17PM -0800, Paul Bryan wrote:
> 1. Noted: Python's for statement will happily iterate over an object
> that only implements __next__.

That is not correct.

>>> class C(object):
...     def __next__(self):
...             return 1
... 
>>> for i in C():
...     print(i)
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'C' object is not iterable



> 2. The documentation is pretty clear on what is expected of an
> iterator: implement __next__ and __iter__.

That goes back to the PEP introducing the iterator protocol in version 
2.1. This is not something new.


> 3. It is perfectly reasonable for __iter__ to return something other
> than self; the documentation already reflects this.

Right. Your object can return anything it likes from `__iter__`. But 
then the object isn't an iterator itself, it is an iterable. That is 
perfectly fine, many wonderful objects that are iterable aren't 
iterators (e.g. lists, strings, dicts, sets, etc).


-- 
Steve
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/F36FF6LBAZ4L2BV7WGPWFSIHGHGHBA33/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to