Issue 25926: Clarify that the pure python equivalents are only approximate.

This commit is contained in:
Raymond Hettinger 2016-05-28 00:10:56 -07:00
parent fe289c0f6f
commit 819581b843
2 changed files with 22 additions and 19 deletions

View File

@ -97,7 +97,7 @@ loops that truncate the stream.
:class:`~fractions.Fraction`.) If the input iterable is empty, the :class:`~fractions.Fraction`.) If the input iterable is empty, the
output iterable will also be empty. output iterable will also be empty.
Equivalent to:: Roughly equivalent to::
def accumulate(iterable, func=operator.add): def accumulate(iterable, func=operator.add):
'Return running totals' 'Return running totals'
@ -156,7 +156,7 @@ loops that truncate the stream.
Make an iterator that returns elements from the first iterable until it is Make an iterator that returns elements from the first iterable until it is
exhausted, then proceeds to the next iterable, until all of the iterables are exhausted, then proceeds to the next iterable, until all of the iterables are
exhausted. Used for treating consecutive sequences as a single sequence. exhausted. Used for treating consecutive sequences as a single sequence.
Equivalent to:: Roughly equivalent to::
def chain(*iterables): def chain(*iterables):
# chain('ABC', 'DEF') --> A B C D E F # chain('ABC', 'DEF') --> A B C D E F
@ -189,7 +189,7 @@ loops that truncate the stream.
value. So if the input elements are unique, there will be no repeat value. So if the input elements are unique, there will be no repeat
values in each combination. values in each combination.
Equivalent to:: Roughly equivalent to::
def combinations(iterable, r): def combinations(iterable, r):
# combinations('ABCD', 2) --> AB AC AD BC BD CD # combinations('ABCD', 2) --> AB AC AD BC BD CD
@ -238,7 +238,7 @@ loops that truncate the stream.
value. So if the input elements are unique, the generated combinations value. So if the input elements are unique, the generated combinations
will also be unique. will also be unique.
Equivalent to:: Roughly equivalent to::
def combinations_with_replacement(iterable, r): def combinations_with_replacement(iterable, r):
# combinations_with_replacement('ABC', 2) --> AA AB AC BB BC CC # combinations_with_replacement('ABC', 2) --> AA AB AC BB BC CC
@ -278,7 +278,7 @@ loops that truncate the stream.
Make an iterator that filters elements from *data* returning only those that Make an iterator that filters elements from *data* returning only those that
have a corresponding element in *selectors* that evaluates to ``True``. have a corresponding element in *selectors* that evaluates to ``True``.
Stops when either the *data* or *selectors* iterables has been exhausted. Stops when either the *data* or *selectors* iterables has been exhausted.
Equivalent to:: Roughly equivalent to::
def compress(data, selectors): def compress(data, selectors):
# compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F # compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F
@ -291,7 +291,7 @@ loops that truncate the stream.
Make an iterator that returns evenly spaced values starting with number *start*. Often Make an iterator that returns evenly spaced values starting with number *start*. Often
used as an argument to :func:`map` to generate consecutive data points. used as an argument to :func:`map` to generate consecutive data points.
Also, used with :func:`zip` to add sequence numbers. Equivalent to:: Also, used with :func:`zip` to add sequence numbers. Roughly equivalent to::
def count(start=0, step=1): def count(start=0, step=1):
# count(10) --> 10 11 12 13 14 ... # count(10) --> 10 11 12 13 14 ...
@ -312,7 +312,7 @@ loops that truncate the stream.
Make an iterator returning elements from the iterable and saving a copy of each. Make an iterator returning elements from the iterable and saving a copy of each.
When the iterable is exhausted, return elements from the saved copy. Repeats When the iterable is exhausted, return elements from the saved copy. Repeats
indefinitely. Equivalent to:: indefinitely. Roughly equivalent to::
def cycle(iterable): def cycle(iterable):
# cycle('ABCD') --> A B C D A B C D A B C D ... # cycle('ABCD') --> A B C D A B C D A B C D ...
@ -333,7 +333,7 @@ loops that truncate the stream.
Make an iterator that drops elements from the iterable as long as the predicate Make an iterator that drops elements from the iterable as long as the predicate
is true; afterwards, returns every element. Note, the iterator does not produce is true; afterwards, returns every element. Note, the iterator does not produce
*any* output until the predicate first becomes false, so it may have a lengthy *any* output until the predicate first becomes false, so it may have a lengthy
start-up time. Equivalent to:: start-up time. Roughly equivalent to::
def dropwhile(predicate, iterable): def dropwhile(predicate, iterable):
# dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1 # dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1
@ -349,7 +349,7 @@ loops that truncate the stream.
Make an iterator that filters elements from iterable returning only those for Make an iterator that filters elements from iterable returning only those for
which the predicate is ``False``. If *predicate* is ``None``, return the items which the predicate is ``False``. If *predicate* is ``None``, return the items
that are false. Equivalent to:: that are false. Roughly equivalent to::
def filterfalse(predicate, iterable): def filterfalse(predicate, iterable):
# filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8 # filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8
@ -386,7 +386,7 @@ loops that truncate the stream.
groups.append(list(g)) # Store group iterator as a list groups.append(list(g)) # Store group iterator as a list
uniquekeys.append(k) uniquekeys.append(k)
:func:`groupby` is equivalent to:: :func:`groupby` is roughly equivalent to::
class groupby: class groupby:
# [k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B # [k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B
@ -426,7 +426,7 @@ loops that truncate the stream.
specified position. Unlike regular slicing, :func:`islice` does not support specified position. Unlike regular slicing, :func:`islice` does not support
negative values for *start*, *stop*, or *step*. Can be used to extract related negative values for *start*, *stop*, or *step*. Can be used to extract related
fields from data where the internal structure has been flattened (for example, a fields from data where the internal structure has been flattened (for example, a
multi-line report may list a name field on every third line). Equivalent to:: multi-line report may list a name field on every third line). Roughly equivalent to::
def islice(iterable, *args): def islice(iterable, *args):
# islice('ABCDEFG', 2) --> A B # islice('ABCDEFG', 2) --> A B
@ -464,7 +464,7 @@ loops that truncate the stream.
value. So if the input elements are unique, there will be no repeat value. So if the input elements are unique, there will be no repeat
values in each permutation. values in each permutation.
Equivalent to:: Roughly equivalent to::
def permutations(iterable, r=None): def permutations(iterable, r=None):
# permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC # permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC
@ -510,7 +510,7 @@ loops that truncate the stream.
Cartesian product of input iterables. Cartesian product of input iterables.
Equivalent to nested for-loops in a generator expression. For example, Roughly equivalent to nested for-loops in a generator expression. For example,
``product(A, B)`` returns the same as ``((x,y) for x in A for y in B)``. ``product(A, B)`` returns the same as ``((x,y) for x in A for y in B)``.
The nested loops cycle like an odometer with the rightmost element advancing The nested loops cycle like an odometer with the rightmost element advancing
@ -522,7 +522,7 @@ loops that truncate the stream.
repetitions with the optional *repeat* keyword argument. For example, repetitions with the optional *repeat* keyword argument. For example,
``product(A, repeat=4)`` means the same as ``product(A, A, A, A)``. ``product(A, repeat=4)`` means the same as ``product(A, A, A, A)``.
This function is equivalent to the following code, except that the This function is roughly equivalent to the following code, except that the
actual implementation does not build up intermediate results in memory:: actual implementation does not build up intermediate results in memory::
def product(*args, repeat=1): def product(*args, repeat=1):
@ -541,7 +541,9 @@ loops that truncate the stream.
Make an iterator that returns *object* over and over again. Runs indefinitely Make an iterator that returns *object* over and over again. Runs indefinitely
unless the *times* argument is specified. Used as argument to :func:`map` for unless the *times* argument is specified. Used as argument to :func:`map` for
invariant parameters to the called function. Also used with :func:`zip` to invariant parameters to the called function. Also used with :func:`zip` to
create an invariant part of a tuple record. Equivalent to:: create an invariant part of a tuple record.
Roughly equivalent to::
def repeat(object, times=None): def repeat(object, times=None):
# repeat(10, 3) --> 10 10 10 # repeat(10, 3) --> 10 10 10
@ -564,7 +566,7 @@ loops that truncate the stream.
the iterable. Used instead of :func:`map` when argument parameters are already the iterable. Used instead of :func:`map` when argument parameters are already
grouped in tuples from a single iterable (the data has been "pre-zipped"). The grouped in tuples from a single iterable (the data has been "pre-zipped"). The
difference between :func:`map` and :func:`starmap` parallels the distinction difference between :func:`map` and :func:`starmap` parallels the distinction
between ``function(a,b)`` and ``function(*c)``. Equivalent to:: between ``function(a,b)`` and ``function(*c)``. Roughly equivalent to::
def starmap(function, iterable): def starmap(function, iterable):
# starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000 # starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000
@ -575,7 +577,7 @@ loops that truncate the stream.
.. function:: takewhile(predicate, iterable) .. function:: takewhile(predicate, iterable)
Make an iterator that returns elements from the iterable as long as the Make an iterator that returns elements from the iterable as long as the
predicate is true. Equivalent to:: predicate is true. Roughly equivalent to::
def takewhile(predicate, iterable): def takewhile(predicate, iterable):
# takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4 # takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4
@ -588,7 +590,7 @@ loops that truncate the stream.
.. function:: tee(iterable, n=2) .. function:: tee(iterable, n=2)
Return *n* independent iterators from a single iterable. Equivalent to:: Return *n* independent iterators from a single iterable. Roughly equivalent to::
def tee(iterable, n=2): def tee(iterable, n=2):
it = iter(iterable) it = iter(iterable)
@ -619,7 +621,7 @@ loops that truncate the stream.
Make an iterator that aggregates elements from each of the iterables. If the Make an iterator that aggregates elements from each of the iterables. If the
iterables are of uneven length, missing values are filled-in with *fillvalue*. iterables are of uneven length, missing values are filled-in with *fillvalue*.
Iteration continues until the longest iterable is exhausted. Equivalent to:: Iteration continues until the longest iterable is exhausted. Roughly equivalent to::
class ZipExhausted(Exception): class ZipExhausted(Exception):
pass pass

View File

@ -1303,6 +1303,7 @@ Ralf Schmitt
Michael Schneider Michael Schneider
Peter Schneider-Kamp Peter Schneider-Kamp
Arvin Schnell Arvin Schnell
Nofar Schnider
Scott Schram Scott Schram
Robin Schreiber Robin Schreiber
Chad J. Schroeder Chad J. Schroeder