Erik Bray <erik.m.b...@gmail.com> added the comment:

> Thinking about the generator-iterator case a bit more, "False" would be a bad 
> default for that. Allowing "NotImplemented" to indicate the ambiguous "Might 
> be finite, might be infinite" state, and using that as the default for 
> generator-iterators, would probably make sense.

This is why I suggested the converse--something like __finite_iterator__ 
(nevermind bikeshedding over the name or "yet another dunder method).  This is 
something one would use to mark as iterator as "this is definitely expected to 
terminate at some point, assuming it is correctly implemented".  

If __finite_iterator__ == False, which should be the default, it doesn't 
necessarily mean it is infinite either, it just may or may not be finite, so 
there's no guarantee.

I think that __finite_iterator__ == True is more or less equivalent to 
returning a non-zero value from __length_hint__, whereas __finite_iterator__ == 
False is equivalent to raising NotImplemented for __length_hint__.  Either way 
it means adding __length_hint__ to all iterators, and also (as Nick suggested) 
having a decorator for generators to set the appropriate hint as well.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue33939>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to