[Python-Dev] PEP 0424: A method for exposing a length hint
Steven D'Aprano
steve at pearwood.info
Sun Jul 15 18:21:20 CEST 2012
Antoine Pitrou wrote:
> First, you can't implement __length_hint__ for a generator, which is the
> preferred (the most practical) way of writing iterators in pure Python.
Limitations of generators are no reason for not improving iterators which are
not generators. __length_hint__ already exists; this proposal simply proposes
making it documented and officially supported.
py> iter([]).__length_hint__
<built-in method __length_hint__ of list_iterator object at 0xb7bcf98c>
> Even if __length_hint__ is implemented, its result may be wrong.
> That's the whole point: it's a *hint*; an iterator might tell you it's
> finite while it's infinite, or the reverse.
If it claims to be infinite, I see no reason to disbelieve it on the
off-chance that it is actually both finite and small enough to fit into memory
without crashing my system. If it claims to be finite, but is actually
infinite, well that's not much of a hint, is it? There's an implied promise
that the hint will be close to the real value, not infinitely distant.
> My conclusion is that an infinite iterator is a documentation issue.
> Just tell the user that it doesn't stop, and let them shoot themselves
> in the foot in they want to.
Buffer overflows are a documentation issue. Just tell the user not to
overwrite memory they don't mean to, and let them shoot themselves in the foot
if they want.
*wink*
--
Steven
More information about the Python-Dev
mailing list