[Python-checkins] python/nondist/peps pep-0290.txt,1.11,1.12
rhettinger at users.sourceforge.net
rhettinger at users.sourceforge.net
Sat Jan 10 05:24:30 EST 2004
Update of /cvsroot/python/python/nondist/peps
In directory sc8-pr-cvs1:/tmp/cvs-serv15358
Modified Files:
pep-0290.txt
Log Message:
Py2.4 updates.
Index: pep-0290.txt
===================================================================
RCS file: /cvsroot/python/python/nondist/peps/pep-0290.txt,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** pep-0290.txt 5 Dec 2003 17:51:40 -0000 1.11
--- pep-0290.txt 10 Jan 2004 10:24:27 -0000 1.12
***************
*** 99,102 ****
--- 99,184 ----
take advantage of the modernization.
+ Python 2.4 or Later
+ -------------------
+
+ Simplifying Custom Sorts
+ ''''''''''''''''''''''''
+
+ In Python 2.4, the ``sort`` method for lists and the new ``sorted``
+ built-in function both accept a ``key`` function for computing sort
+ keys. Unlike the ``cmp`` function which gets applied to every
+ comparison, the key function gets applied only once to each record.
+ It is much faster than cmp and typically more readable while using
+ less code. The key function also maintains the stability of the
+ sort (records with the same key are left in their original order.
+
+ Original code using a comparison function::
+
+ names.sort(lambda x,y: cmp(x.lower(), y.lower()))
+
+ Alternative original code with explicit decoration::
+
+ tempnames = [(n.lower(), n) for n in names]
+ tempnames.sort()
+ names = [original for decorated, original in tempnames]
+
+ Revised code using a key function::
+
+ names.sort(key=str.lower) # case-insensitive sort
+
+
+ Locating: ``grep sort *.py``
+
+ Replacing Common Uses of Lambda
+ '''''''''''''''''''''''''''''''
+
+ In Python 2.4, the ``operator`` module gained two new functions,
+ itemgetter() and attrgetter() that can replace common uses of
+ the ``lambda`` keyword. The new functions run faster and
+ are considered by some to improve readability.
+
+ Pattern::
+
+ lambda r: r[2] --> itemgetter(2)
+ lambda r: r.myattr --> attrgetter('myattr')
+
+ Typical contexts::
+
+ sort(studentrecords, key=attrgetter('gpa')) # set a sort field
+ map(studentrecords, attrgetter('lastname')) # extract a field
+
+ Locating: ``grep lambda *.py``
+
+ Simplified Reverse Iteration
+ ''''''''''''''''''''''''''''
+
+ Python 2.4 introduced the ``reversed`` builtin function for reverse
+ iteration. The existing approaches to reverse iteration suffered
+ from wordiness, performance issues (speed and memory consumption),
+ and/or lack of clarity. A preferred style is to express the
+ sequence in a forwards direction, apply ``reversed`` to the result,
+ and then loop over the resulting fast, memory friendly iterator.
+
+ Original code expressed with half-open intervals::
+
+ for i in range(n-1, -1, -1):
+ print seqn[i]
+
+ Alternative original code reversed in multiple steps::
+
+ rseqn = list(seqn)
+ rseqn.reverse()
+ for value in rseqn:
+ print value
+
+ Alternative original code expressed with extending slicing:
+
+ for value in seqn[::-1]:
+ print value
+
+ Revised code using the ``reversed`` function:
+
+ for value in reversed(seqn):
+ print value
Python 2.3 or Later
More information about the Python-checkins
mailing list