Note: I am all for not enforcing anything here -- let's keep duck typing alive!
If static type checkers want to be more pedantic, they can be -- that's kinda what they are for :-) But the OP wrote: """ "[i]terators are required to have an __iter__() <https://docs.python.org/3/reference/datamodel.html#object.__iter__> method" which neither `for` nor `iter()` actually enforce. """ I'm confused -- as far as I can tell `for` does enforce this -- well, it doesn't enforce it, but it does require it, which is the same thing, yes? But does it need to? On Wed, Sep 15, 2021 at 4:07 PM Guido van Rossum <gu...@python.org> wrote: > Reminder about how for-loops work: > > This: > > for x in seq: > <body> > > translates (roughly) to this: > > _it = iter(seq) > while True: > try: > x = next(_it) > except StopIteration: > break > <body> > exactly -- that call to iter is always made, yes? The "trick" here is that we want it to be easy to use a for loop with either an iterable or an iterator. Otherwise, we would require people to write: for i in iter(a_sequence): ... which I doubt anyone would want, backward compatibility aside. And since iter() is going to always get called, we need __iter__ methods that return self. However, I suppose one could do a for loop something like this instead. _it = seq while True: try: x = next(_it) except TypeError: _it = iter(_it) x = next(_it) except StopIteration: break <body> That is, instead of making every iterator an iterable, keep the two concepts more distinct: An "Iterator" has a __next__ method that returns an item or raises StopIteration. An "Iterable" has an __iter__ method that returns an iterator. That would mean that one couldn't write a single class that is both an iterable and an iterator, and uses (abuses) __iter__ to reset itself. But would that be a bad thing? Anyway, this is just a mental exercise, I am not suggesting changing anything. -CHB -- Christopher Barker, Ph.D. Oceanographer Emergency Response Division NOAA/NOS/OR&R (206) 526-6959 voice 7600 Sand Point Way NE (206) 526-6329 fax Seattle, WA 98115 (206) 526-6317 main reception chris.bar...@noaa.gov
_______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/5OBJCQPV2A6MB7BNYUEFASU2P4D23BWQ/ Code of Conduct: http://python.org/psf/codeofconduct/