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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4