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

Mark Shannon mark at hotpy.org
Sun Jul 15 16:14:59 CEST 2012


Alex Gaynor wrote:
> Hi all,
> 
> I've just submitted a PEP proposing making __length_hint__ a public API for 
> users to define and other VMs to implement:

These seems back-to-front.
__length_hint__ is *used* by the VM, not provided by it.
It should be part of the object model, rather than the API.

> 
> PEP: 424
> Title: A method for exposing a length hint
> Version: $Revision$
> Last-Modified: $Date
> Author: Alex Gaynor <alex.gaynor at gmail.com>
> Status: Draft
> Type: Standards Track
> Content-Type: text/x-rst
> Created: 14-July-2012
> Python-Version: 3.4
> 
> 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

Don't use "map" as an example.
map returns an iterator so it doesn't need __length_hint__

> ``__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).
> 
> 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.

Rather than raising a TypeError, why not return NotImplemented?

> 
> Rationale
> =========
> 
> Being able to pre-allocate lists based on the expected size, as estimated by 
> ``__length_hint__``, can be a significant optimization. CPython has been
> 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
> =========
> 
> This document has been placed into the public domain.
> 
> ..
>     Local Variables:
>     mode: indented-text
>     indent-tabs-mode: nil
>     sentence-end-double-space: t
>     fill-column: 70
>     coding: utf-8
> 
> 
> 
> 
> Alex
> 
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: http://mail.python.org/mailman/options/python-dev/mark%40hotpy.org



More information about the Python-Dev mailing list