[Python-Dev] PEP 0424: A method for exposing a length hint (original) (raw)

Stefan Behnel stefan_ml at behnel.de
Mon Jul 16 09:36:57 CEST 2012


Alex Gaynor, 15.07.2012 00:11:

CPython currently defines an _lengthhint_ 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 _lengthhint_. Types can then define _lengthhint_ 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 _lengthhint_ for other interpreter and non-standard library Python to implement. _lengthhint_ 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.

I'd like to more visibly repeat my suggestion to make this a slot method "tp_length_hint()" in extension types that returns a Py_ssize_t.

That suggests that a negative return value would have a special meaning instead of relying on return values like NotImplemented. The Python wrapper of that slot method could still implement a mapping for this.

Return values could be -1 for "don't know" and -2 for "infinite" at the C level, and NotImplemented for "don't know" at the Python level. Not sure about a good Python value for "infinite".

Maybe return -1 for "infinite" at both levels and -2/NotImplemented for "don't know" in C/Python? That would suggest -3 to propagate exceptions at the C level.

Stefan



More information about the Python-Dev mailing list