Updates to PEP-0424 following the discussion.

This commit is contained in:
Alex Gaynor 2012-07-14 16:49:42 -07:00
parent 8395ac1f02
commit b01cd39186
1 changed files with 7 additions and 16 deletions

View File

@ -14,8 +14,8 @@ Abstract
========
CPython currently defines an ``__length_hint__`` method on several types, such
as various iterators. This method is then used by various other functions (such as
``map``) to presize lists based on the estimated returned by
as various iterators. This method is then used by various other functions (such
as ``map``) to presize lists based on the estimated returned by
``__length_hint__``. Types can then define ``__length_hint__`` which are not
sized, and thus should not define ``__len__``, but can estimate or compute a
size (such as many iterators).
@ -26,10 +26,11 @@ Proposal
This PEP proposes formally documenting ``__length_hint__`` for other
interpreter and non-standard library Python to implement.
``__length_hint__`` must return an integer, and is not required to be accurate.
It may return a value that is either larger or smaller than the actual size of
the container. It may raise a ``TypeError`` if a specific instance cannot have
its length estimated. It may not return a negative value.
``__length_hint__`` must return an integer (else a TypeError is raised), and is
not required to be accurate. It may return a value that is either larger or
smaller than the actual size ofthe container. It may raise a ``TypeError`` if a
specific instance cannot have its length estimated. It may not return a
negative value (else a ValueError is raised).
Rationale
=========
@ -38,16 +39,6 @@ Being able to pre-allocate lists based on the expected size, as estimated by ``_
observed to run some code faster than PyPy, purely because of this optimization
being present.
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__``.
Copyright
=========