PEP 260: simplify xrange()
This commit is contained in:
parent
be63f6f87c
commit
f3c016e25f
|
@ -60,6 +60,7 @@ Index by Category
|
||||||
S 256 pep-0256.txt Docstring Processing System Framework Goodger
|
S 256 pep-0256.txt Docstring Processing System Framework Goodger
|
||||||
S 257 pep-0257.txt Docstring Conventions Goodger, van Rossum
|
S 257 pep-0257.txt Docstring Conventions Goodger, van Rossum
|
||||||
S 258 pep-0258.txt DPS Generic Implementation Details Goodger
|
S 258 pep-0258.txt DPS Generic Implementation Details Goodger
|
||||||
|
S 260 pep-0260.txt Simplify xrange() van Rossum
|
||||||
|
|
||||||
Py-in-the-sky PEPs (not ready; may become active yet)
|
Py-in-the-sky PEPs (not ready; may become active yet)
|
||||||
|
|
||||||
|
@ -186,6 +187,7 @@ Numerical Index
|
||||||
S 257 pep-0257.txt Docstring Conventions Goodger, van Rossum
|
S 257 pep-0257.txt Docstring Conventions Goodger, van Rossum
|
||||||
S 258 pep-0258.txt DPS Generic Implementation Details Goodger
|
S 258 pep-0258.txt DPS Generic Implementation Details Goodger
|
||||||
SR 259 pep-0259.txt Omit printing newline after newline van Rossum
|
SR 259 pep-0259.txt Omit printing newline after newline van Rossum
|
||||||
|
S 260 pep-0260.txt Simplify xrange() van Rossum
|
||||||
|
|
||||||
|
|
||||||
Key
|
Key
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
PEP: 260
|
||||||
|
Title: Simplify xrange()
|
||||||
|
Version: $Revision$
|
||||||
|
Author: guido@python.org (Guido van Rossum)
|
||||||
|
Status: Draft
|
||||||
|
Type: Standards Track
|
||||||
|
Python-Version: 2.2
|
||||||
|
Created: 26-Jun-2001
|
||||||
|
Post-History: 26-Jun-2001
|
||||||
|
|
||||||
|
Abstract
|
||||||
|
|
||||||
|
This PEP proposes to strip the xrange() object from some rarely
|
||||||
|
used behavior like x[i:j] and x*n.
|
||||||
|
|
||||||
|
|
||||||
|
Problem
|
||||||
|
|
||||||
|
The xrange() function has one idiomatic use:
|
||||||
|
|
||||||
|
for i in xrange(...): ...
|
||||||
|
|
||||||
|
However, the xrange() object has a bunch of rarely used behaviors
|
||||||
|
that attempt to make it more sequence-like. These are so rarely
|
||||||
|
used that historically they have has serious bugs (e.g. off-by-one
|
||||||
|
errors) that went undetected for several releases.
|
||||||
|
|
||||||
|
I claim that it's better to drop these unused features. This will
|
||||||
|
simplify the implementation, testing, and documentation, and
|
||||||
|
reduce maintenance and code size.
|
||||||
|
|
||||||
|
|
||||||
|
Proposed Solution
|
||||||
|
|
||||||
|
I propose to strip the xrange() object to the bare minimum. The
|
||||||
|
only retained sequence behaviors are x[i], len(x), and repr(x).
|
||||||
|
In particular, these behaviors will be dropped:
|
||||||
|
|
||||||
|
x[i:j] (slicing)
|
||||||
|
x*n, n*x (sequence-repeat)
|
||||||
|
cmp(x1, x2) (comparisons)
|
||||||
|
i in x (containment test)
|
||||||
|
x.tolist() method
|
||||||
|
x.start, x.stop, x.step attributes
|
||||||
|
|
||||||
|
By implementing a custom iterator type, we could speed up the
|
||||||
|
common use, but this is optional (the default sequence iterator
|
||||||
|
does just fine).
|
||||||
|
|
||||||
|
I expect it will take at most an hour to rip it all out; another
|
||||||
|
hour to reduce the test suite and documentation.
|
||||||
|
|
||||||
|
|
||||||
|
Scope
|
||||||
|
|
||||||
|
This PEP only affects the xrange() built-in function.
|
||||||
|
|
||||||
|
|
||||||
|
Risks
|
||||||
|
|
||||||
|
Somebody's code could be relying on the extended code, and this
|
||||||
|
code would break. However, given that historically bugs in the
|
||||||
|
extended code have gone undetected for so long, it's unlikely that
|
||||||
|
much code is affected.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright
|
||||||
|
|
||||||
|
This document has been placed in the public domain.
|
||||||
|
|
||||||
|
|
||||||
|
Local Variables:
|
||||||
|
mode: indented-text
|
||||||
|
indent-tabs-mode: nil
|
||||||
|
End:
|
Loading…
Reference in New Issue