[Python-Dev] PEP 0424: A method for exposing a length hint

Steven D'Aprano steve at pearwood.info
Sun Jul 15 10:21:13 CEST 2012

Nick Coghlan wrote:
> On Sun, Jul 15, 2012 at 9:18 AM, Benjamin Peterson <benjamin at python.org> wrote:
>>> Open questions
>>> ==============
>>> There are two open questions for this PEP:
>>> * Should ``list`` expose a kwarg in it's constructor for supplying a length
>>>   hint.
>>> * Should a function be added either to ``builtins`` or some other module which
>>>   calls ``__length_hint__``, like ``builtins.len`` calls ``__len__``.
>> Let's try to keep this as limited as possible for a public API.
> Length hints are very useful for *any* container implementation,
> whether those containers are in the standard library or not. Just as
> we exposed operator.index when __index__ was added, we should expose
> an "operator.length_hint" function with the following semantics:

As given, length_hint gives no way of distinguishing between iterables and 

py> length_hint([])
py> length_hint(42)

nor does it give iterable objects a way to indicate that either they don't 
know their length, or that they are infinite.

I suggest:

* object (and hence all other types that don't explicitly override it)
   should have a __length_hint__ that raises TypeError;

* __length_hint__ should be allowed to return None to indicate "don't know"
   or -1 to indicate "infinite".

Presumably anything that wishes to create a list or other sequence from an 
object with a hint of -1 could then raise an exception immediately.


More information about the Python-Dev mailing list