blob: 9e699a3dcee5ae7540cc4800c7e8391c6a2b5ded [file] [log] [blame]
Fred Drakeed0fa3d2003-07-30 19:14:09 +00001\documentclass{howto}
2\usepackage{distutils}
3% $Id$
4
5\title{What's New in Python 2.4}
6\release{0.0}
7\author{A.M.\ Kuchling}
8\authoraddress{\email{amk@amk.ca}}
9
10\begin{document}
11\maketitle
12\tableofcontents
13
14This article explains the new features in Python 2.4. No release date
Raymond Hettingerd4462302003-11-26 17:52:45 +000015for Python 2.4 has been set; expect that this will happen mid-2004.
Fred Drakeed0fa3d2003-07-30 19:14:09 +000016
17While Python 2.3 was primarily a library development release, Python
182.4 may extend the core language and interpreter in
19as-yet-undetermined ways.
20
21This article doesn't attempt to provide a complete specification of
22the new features, but instead provides a convenient overview. For
23full details, you should refer to the documentation for Python 2.4.
24% add hyperlink when the documentation becomes available online.
25If you want to understand the complete implementation and design
26rationale, refer to the PEP for a particular new feature.
27
Raymond Hettinger7e0282f2003-11-24 07:14:54 +000028%======================================================================
29\section{PEP 218: Built-In Set Objects}
30
31Two new built-in types, \function{set(iterable)} and
32\function{frozenset(iterable)} provide high speed data types for
33membership testing, for eliminating duplicates from sequences, and
34for mathematical operations like unions, intersections, differences,
35and symmetric differences.
36
37\begin{verbatim}
38>>> a = set('abracadabra') # form a set from a string
39>>> 'z' in a # fast membership testing
40False
41>>> a # unique letters in a
42set(['a', 'r', 'b', 'c', 'd'])
43>>> ''.join(a) # convert back into a string
44'arbcd'
Raymond Hettingerd4462302003-11-26 17:52:45 +000045
Raymond Hettinger7e0282f2003-11-24 07:14:54 +000046>>> b = set('alacazam') # form a second set
47>>> a - b # letters in a but not in b
48set(['r', 'd', 'b'])
49>>> a | b # letters in either a or b
50set(['a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'])
51>>> a & b # letters in both a and b
52set(['a', 'c'])
53>>> a ^ b # letters in a or b but not both
54set(['r', 'd', 'b', 'm', 'z', 'l'])
Raymond Hettingerd4462302003-11-26 17:52:45 +000055
Raymond Hettinger7e0282f2003-11-24 07:14:54 +000056>>> a.add('z') # add a new element
57>>> a.update('wxy') # add multiple new elements
58>>> a
59set(['a', 'c', 'b', 'd', 'r', 'w', 'y', 'x', 'z'])
60>>> a.remove('x') # take one element out
61>>> a
62set(['a', 'c', 'b', 'd', 'r', 'w', 'y', 'z'])
63\end{verbatim}
64
65The type \function{frozenset()} is an immutable version of \function{set()}.
66Since it is immutable and hashable, it may be used as a dictionary key or
67as a member of another set. Accordingly, it does not have methods
68like \method{add()} and \method{remove()} which could alter its contents.
69
70\begin{seealso}
71\seepep{218}{Adding a Built-In Set Object Type}{Originally proposed by
72Greg Wilson and ultimately implemented by Raymond Hettinger.}
73\end{seealso}
Fred Drakeed0fa3d2003-07-30 19:14:09 +000074
75%======================================================================
Andrew M. Kuchling1a420252003-11-08 15:58:49 +000076\section{PEP 322: Reverse Iteration}
Fred Drakeed0fa3d2003-07-30 19:14:09 +000077
Andrew M. Kuchling1a420252003-11-08 15:58:49 +000078A new built-in function, \function{reversed(seq)}, takes a sequence
79and returns an iterator that returns the elements of the sequence
80in reverse order.
81
82\begin{verbatim}
Raymond Hettingerbc3cba22003-11-12 16:39:30 +000083>>> for i in reversed(xrange(1,4)):
Andrew M. Kuchling1a420252003-11-08 15:58:49 +000084... print i
85...
863
872
881
89\end{verbatim}
90
Raymond Hettingerbc3cba22003-11-12 16:39:30 +000091Compared to extended slicing, \code{range(1,4)[::-1]}, \function{reversed()}
92is easier to read, runs faster, and uses substantially less memory.
93
Andrew M. Kuchling1a420252003-11-08 15:58:49 +000094Note that \function{reversed()} only accepts sequences, not arbitrary
Raymond Hettingerbc3cba22003-11-12 16:39:30 +000095iterators. If you want to reverse an iterator, first convert it to
96a list with \function{list()}.
Andrew M. Kuchling1a420252003-11-08 15:58:49 +000097
98\begin{verbatim}
99>>> input = open('/etc/passwd', 'r')
100>>> for line in reversed(list(input)):
101... print line
102...
103root:*:0:0:System Administrator:/var/root:/bin/tcsh
104 ...
105\end{verbatim}
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000106
Andrew M. Kuchlingf7a6b672003-11-08 16:05:37 +0000107\begin{seealso}
108\seepep{322}{Reverse Iteration}{Written and implemented by Raymond Hettinger.}
109
110\end{seealso}
111
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000112
113%======================================================================
114\section{Other Language Changes}
115
116Here are all of the changes that Python 2.4 makes to the core Python
117language.
118
119\begin{itemize}
Raymond Hettingerd4462302003-11-26 17:52:45 +0000120
121\item The string methods, \method{ljust()}, \method{rjust()}, and
Andrew M. Kuchling67087562003-11-26 18:03:48 +0000122\method{center()} now take an optional argument for specifying a
Raymond Hettingerd4462302003-11-26 17:52:45 +0000123fill character other than a space.
124
Andrew M. Kuchling2fb4d512003-10-21 12:31:16 +0000125\item The \method{sort()} method of lists gained three keyword
126arguments, \var{cmp}, \var{key}, and \var{reverse}. These arguments
127make some common usages of \method{sort()} simpler. All are optional.
128
129\var{cmp} is the same as the previous single argument to
130\method{sort()}; if provided, the value should be a comparison
131function that takes two arguments and returns -1, 0, or +1 depending
132on how the arguments compare.
133
134\var{key} should be a single-argument function that takes a list
135element and returns a comparison key for the element. The list is
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000136then sorted using the comparison keys. The following example sorts a
137list case-insensitively:
Andrew M. Kuchling2fb4d512003-10-21 12:31:16 +0000138
139\begin{verbatim}
140>>> L = ['A', 'b', 'c', 'D']
141>>> L.sort() # Case-sensitive sort
142>>> L
143['A', 'D', 'b', 'c']
144>>> L.sort(key=lambda x: x.lower())
145>>> L
146['A', 'b', 'c', 'D']
147>>> L.sort(cmp=lambda x,y: cmp(x.lower(), y.lower()))
148>>> L
149['A', 'b', 'c', 'D']
150\end{verbatim}
151
152The last example, which uses the \var{cmp} parameter, is the old way
153to perform a case-insensitive sort. It works, but is slower than
154using a \var{key} parameter. Using \var{key} results in calling the
155\method{lower()} method once for each element in the list while using
156\var{cmp} will call the method twice for each comparison.
157
Andrew M. Kuchling981a9182003-11-13 21:33:26 +0000158For simple key functions and comparison functions, it is often
159possible to avoid a \keyword{lambda} expression by using an unbound
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000160method instead. For example, the above case-insensitive sort is best
161coded as:
162
163\begin{verbatim}
164>>> L.sort(key=str.lower)
165>>> L
166['A', 'b', 'c', 'D']
167\end{verbatim}
168
Andrew M. Kuchling2fb4d512003-10-21 12:31:16 +0000169The \var{reverse} parameter should have a Boolean value. If the value is
170\constant{True}, the list will be sorted into reverse order. Instead
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000171of \code{L.sort(lambda x,y: cmp(y.score, x.score))}, you can now write:
172\code{L.sort(key = lambda x: x.score, reverse=True)}.
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000173
Andrew M. Kuchling981a9182003-11-13 21:33:26 +0000174The results of sorting are now guaranteed to be stable. This means
175that two entries with equal keys will be returned in the same order as
176they were input. For example, you can sort a list of people by name,
177and then sort the list by age, resulting in a list sorted by age where
178people with the same age are in name-sorted order.
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000179
180\item The list type gained a \method{sorted(iterable)} method that works
181like the in-place \method{sort()} method but has been made suitable for
182use in expressions. The differences are:
183 \begin{itemize}
Raymond Hettinger7d1dd042003-11-12 16:42:10 +0000184 \item the input may be any iterable;
185 \item a newly formed copy is sorted, leaving the original intact; and
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000186 \item the expression returns the new sorted copy
187 \end{itemize}
Andrew M. Kuchling1a420252003-11-08 15:58:49 +0000188
189\begin{verbatim}
190>>> L = [9,7,8,3,2,4,1,6,5]
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000191>>> [10+i for i in list.sorted(L)] # usable in a list comprehension
192[11, 12, 13, 14, 15, 16, 17, 18, 19]
193>>> L = [9,7,8,3,2,4,1,6,5] # original is left unchanged
194[9,7,8,3,2,4,1,6,5]
Raymond Hettingerd4462302003-11-26 17:52:45 +0000195
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000196>>> list.sorted('Monte Python') # any iterable may be an input
197[' ', 'M', 'P', 'e', 'h', 'n', 'n', 'o', 'o', 't', 't', 'y']
Raymond Hettingerd4462302003-11-26 17:52:45 +0000198
199>>> # List the contents of a dict sorted by key values
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000200>>> colormap = dict(red=1, blue=2, green=3, black=4, yellow=5)
201>>> for k, v in list.sorted(colormap.iteritems()):
202... print k, v
203...
204black 4
205blue 2
206green 3
207red 1
208yellow 5
209
Andrew M. Kuchling1a420252003-11-08 15:58:49 +0000210\end{verbatim}
211
Andrew M. Kuchling1a420252003-11-08 15:58:49 +0000212
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000213\item The \function{zip()} built-in function and \function{itertools.izip()}
Andrew M. Kuchling67087562003-11-26 18:03:48 +0000214 now return an empty list instead of raising a \exception{TypeError}
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000215 exception if called with no arguments. This makes the functions more
216 suitable for use with variable length argument lists:
217
218\begin{verbatim}
219>>> def transpose(array):
220... return zip(*array)
221...
222>>> transpose([(1,2,3), (4,5,6)])
223[(1, 4), (2, 5), (3, 6)]
224>>> transpose([])
225[]
226\end{verbatim}
Andrew M. Kuchling6aedcfc2003-10-21 12:48:23 +0000227
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000228\end{itemize}
229
230
231%======================================================================
232\subsection{Optimizations}
233
234\begin{itemize}
235
236\item Optimizations should be described here.
237
238\end{itemize}
239
240The net result of the 2.4 optimizations is that Python 2.4 runs the
241pystone benchmark around XX\% faster than Python 2.3 and YY\% faster
242than Python 2.2.
243
244
245%======================================================================
246\section{New, Improved, and Deprecated Modules}
247
248As usual, Python's standard library received a number of enhancements and
249bug fixes. Here's a partial list of the most notable changes, sorted
250alphabetically by module name. Consult the
251\file{Misc/NEWS} file in the source tree for a more
252complete list of changes, or look through the CVS logs for all the
253details.
254
255\begin{itemize}
256
Andrew M. Kuchling69f31eb2003-08-13 23:11:04 +0000257\item The \module{curses} modules now supports the ncurses extension
258 \function{use_default_colors()}. On platforms where the terminal
259 supports transparency, this makes it possible to use a transparent background.
260 (Contributed by J\"org Lehmann.)
Andrew M. Kuchling6aedcfc2003-10-21 12:48:23 +0000261
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000262\item The \module{heapq} module has been converted to C. The resulting
263 ten-fold improvement in speed makes the module suitable for handling
264 high volumes of data.
Andrew M. Kuchling1a420252003-11-08 15:58:49 +0000265
Andrew M. Kuchlingdff9dbd2003-11-20 22:22:19 +0000266\item The \module{imaplib} module now supports IMAP's THREAD command.
267(Contributed by Yves Dionne.)
268
Andrew M. Kuchlingad809552003-12-06 23:19:23 +0000269\item The \module{itertools} module gained a
270 \function{groupby(\var{iterable}\optional{, \var{func}})} function,
271 inspired by the GROUP BY clause from SQL.
272 \var{iterable} returns a succession of elements, and the optional
273 \var{func} is a function that takes an element and returns a key
274 value; if omitted, the key is simply the element itself.
275 \function{groupby()} then groups the elements into subsequences
276 which have matching values of the key, and returns a series of 2-tuples
277 containing the key value and an iterator over the subsequence.
278
279Here's an example. The \var{key} function simply returns whether a
280number is even or odd, so the result of \function{groupby()} is to
281return consecutive runs of odd or even numbers.
282
283\begin{verbatim}
284>>> import itertools
285>>> L = [2,4,6, 7,8,9,11, 12, 14]
286>>> for key_val, it in itertools.groupby(L, lambda x: x % 2):
287... print key_val, list(it)
288...
2890 [2, 4, 6]
2901 [7]
2910 [8]
2921 [9, 11]
2930 [12, 14]
294>>>
295\end{verbatim}
296
Raymond Hettingerfeb78c92003-12-12 13:13:47 +0000297Like its SQL counterpart, \function{groupby()} is typically used with
298sorted input. The logic for \function{groupby()} is similar to the
299\UNIX{} \code{uniq} filter which makes it handy for eliminating,
300counting, or identifying duplicate elements:
301
302\begin{verbatim}
303>>> word = 'abracadabra'
Andrew M. Kuchling4612bc52003-12-16 20:59:37 +0000304>>> word = list.sorted(word) # Turn string into sorted list of letters
305>>> word
306['a', 'a', 'a', 'a', 'a', 'b', 'b', 'c', 'd', 'r', 'r']
307>>> [k for k, g in groupby(word)] # List the various group keys
Raymond Hettingerfeb78c92003-12-12 13:13:47 +0000308['a', 'b', 'c', 'd', 'r']
Andrew M. Kuchling4612bc52003-12-16 20:59:37 +0000309>>> [(k, len(list(g))) for k, g in groupby(word)] # List key and group length
Raymond Hettingerfeb78c92003-12-12 13:13:47 +0000310[('a', 5), ('b', 2), ('c', 1), ('d', 1), ('r', 2)]
Andrew M. Kuchling4612bc52003-12-16 20:59:37 +0000311>>> [k for k, g in groupby(word) if len(list(g)) > 1] # All groups of size >1
Raymond Hettingerfeb78c92003-12-12 13:13:47 +0000312['a', 'b', 'r']
313\end{verbatim}
314
Andrew M. Kuchlingdff9dbd2003-11-20 22:22:19 +0000315\item A new \function{getsid()} function was added to the
316\module{posix} module that underlies the \module{os} module.
317(Contributed by J. Raynor.)
318
Andrew M. Kuchling6aedcfc2003-10-21 12:48:23 +0000319\item The \module{random} module has a new method called \method{getrandbits(N)}
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000320 which returns an N-bit long integer. This method supports the existing
321 \method{randrange()} method, making it possible to efficiently generate
322 arbitrarily large random numbers (suitable for prime number generation in
323 RSA applications).
Andrew M. Kuchling6aedcfc2003-10-21 12:48:23 +0000324
325\item The regular expression language accepted by the \module{re} module
326 was extended with simple conditional expressions, written as
327 \code{(?(\var{group})\var{A}|\var{B})}. \var{group} is either a
328 numeric group ID or a group name defined with \code{(?P<group>...)}
329 earlier in the expression. If the specified group matched, the
330 regular expression pattern \var{A} will be tested against the string; if
331 the group didn't match, the pattern \var{B} will be used instead.
Andrew M. Kuchling69f31eb2003-08-13 23:11:04 +0000332
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000333\end{itemize}
334
335
336%======================================================================
337% whole new modules get described in \subsections here
338
339
340% ======================================================================
341\section{Build and C API Changes}
342
343Changes to Python's build process and to the C API include:
344
345\begin{itemize}
346
Andrew M. Kuchling6aedcfc2003-10-21 12:48:23 +0000347 \item Three new convenience macros were added for common return
348 values from extension functions: \csimplemacro{Py_RETURN_NONE},
349 \csimplemacro{Py_RETURN_TRUE}, and \csimplemacro{Py_RETURN_FALSE}.
350
351 \item A new function, \cfunction{PyTuple_Pack(N, obj1, obj2, ...,
352 objN)}, constructs tuples from a variable length argument list of
353 Python objects.
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000354
Andrew M. Kuchling2ce1d472003-11-26 18:05:26 +0000355 \item A new function, \cfunction{PyDict_Contains(d, k)}, implements
356 fast dictionary lookups without masking exceptions raised during the
357 look-up process.
Raymond Hettingerd4462302003-11-26 17:52:45 +0000358
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000359\end{itemize}
360
361
362%======================================================================
363\subsection{Port-Specific Changes}
364
365Platform-specific changes go here.
366
367
368%======================================================================
369\section{Other Changes and Fixes \label{section-other}}
370
371As usual, there were a bunch of other improvements and bugfixes
372scattered throughout the source tree. A search through the CVS change
373logs finds there were XXX patches applied and YYY bugs fixed between
374Python 2.3 and 2.4. Both figures are likely to be underestimates.
375
376Some of the more notable changes are:
377
378\begin{itemize}
379
380\item Details go here.
381
382\end{itemize}
383
384
385%======================================================================
386\section{Porting to Python 2.4}
387
388This section lists previously described changes that may require
389changes to your code:
390
391\begin{itemize}
392
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000393\item The \function{zip()} built-in function and \function{itertools.izip()}
394 now return an empty list instead of raising a \exception{TypeError}
395 exception if called with no arguments.
Andrew M. Kuchling6aedcfc2003-10-21 12:48:23 +0000396
397\item \function{dircache.listdir()} now passes exceptions to the caller
398 instead of returning empty lists.
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000399
400\end{itemize}
401
402
403%======================================================================
404\section{Acknowledgements \label{acks}}
405
406The author would like to thank the following people for offering
407suggestions, corrections and assistance with various drafts of this
Andrew M. Kuchling981a9182003-11-13 21:33:26 +0000408article: Raymond Hettinger.
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000409
410\end{document}