blob: bd3818c271fa32cac6ceafa251b501b272531548 [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}
Fred Drakeb914ef02004-01-02 06:57:50 +00008\authoraddress{
9 \strong{Python Software Foundation}\\
10 Email: \email{amk@amk.ca}
11}
Fred Drakeed0fa3d2003-07-30 19:14:09 +000012
13\begin{document}
14\maketitle
15\tableofcontents
16
17This article explains the new features in Python 2.4. No release date
Raymond Hettingerd4462302003-11-26 17:52:45 +000018for Python 2.4 has been set; expect that this will happen mid-2004.
Fred Drakeed0fa3d2003-07-30 19:14:09 +000019
20While Python 2.3 was primarily a library development release, Python
212.4 may extend the core language and interpreter in
22as-yet-undetermined ways.
23
24This article doesn't attempt to provide a complete specification of
25the new features, but instead provides a convenient overview. For
Andrew M. Kuchling35f2b052003-12-18 13:28:13 +000026full details, you should refer to the documentation for Python 2.4,
27such as the \citetitle[../lib/lib.html]{Python Library Reference} and
28the \citetitle[../ref/ref.html]{Python Reference Manual}.
Fred Drakeed0fa3d2003-07-30 19:14:09 +000029If you want to understand the complete implementation and design
30rationale, refer to the PEP for a particular new feature.
31
Andrew M. Kuchling35f2b052003-12-18 13:28:13 +000032
Raymond Hettinger7e0282f2003-11-24 07:14:54 +000033%======================================================================
34\section{PEP 218: Built-In Set Objects}
35
Fred Drake56fcc232004-05-06 02:55:35 +000036Two new built-in types, \function{set(\var{iterable})} and
37\function{frozenset(\var{iterable})} provide high speed data types for
Raymond Hettinger7e0282f2003-11-24 07:14:54 +000038membership testing, for eliminating duplicates from sequences, and
39for mathematical operations like unions, intersections, differences,
40and symmetric differences.
41
42\begin{verbatim}
43>>> a = set('abracadabra') # form a set from a string
44>>> 'z' in a # fast membership testing
45False
46>>> a # unique letters in a
47set(['a', 'r', 'b', 'c', 'd'])
48>>> ''.join(a) # convert back into a string
49'arbcd'
Raymond Hettingerd4462302003-11-26 17:52:45 +000050
Raymond Hettinger7e0282f2003-11-24 07:14:54 +000051>>> b = set('alacazam') # form a second set
52>>> a - b # letters in a but not in b
53set(['r', 'd', 'b'])
54>>> a | b # letters in either a or b
55set(['a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'])
56>>> a & b # letters in both a and b
57set(['a', 'c'])
58>>> a ^ b # letters in a or b but not both
59set(['r', 'd', 'b', 'm', 'z', 'l'])
Raymond Hettingerd4462302003-11-26 17:52:45 +000060
Raymond Hettinger7e0282f2003-11-24 07:14:54 +000061>>> a.add('z') # add a new element
62>>> a.update('wxy') # add multiple new elements
63>>> a
64set(['a', 'c', 'b', 'd', 'r', 'w', 'y', 'x', 'z'])
65>>> a.remove('x') # take one element out
66>>> a
67set(['a', 'c', 'b', 'd', 'r', 'w', 'y', 'z'])
68\end{verbatim}
69
70The type \function{frozenset()} is an immutable version of \function{set()}.
71Since it is immutable and hashable, it may be used as a dictionary key or
72as a member of another set. Accordingly, it does not have methods
73like \method{add()} and \method{remove()} which could alter its contents.
74
Andrew M. Kuchling35f2b052003-12-18 13:28:13 +000075% XXX what happens to the sets module?
Raymond Hettingered54d912003-12-31 01:59:18 +000076% The current thinking is that the sets module will be left alone.
77% That way, existing code will continue to run without alteration.
78% Also, the module provides an autoconversion feature not supported by set()
79% and frozenset().
Andrew M. Kuchling35f2b052003-12-18 13:28:13 +000080
Raymond Hettinger7e0282f2003-11-24 07:14:54 +000081\begin{seealso}
82\seepep{218}{Adding a Built-In Set Object Type}{Originally proposed by
83Greg Wilson and ultimately implemented by Raymond Hettinger.}
84\end{seealso}
Fred Drakeed0fa3d2003-07-30 19:14:09 +000085
86%======================================================================
Andrew M. Kuchling35f2b052003-12-18 13:28:13 +000087\section{PEP 237: Unifying Long Integers and Integers}
88
89XXX write this.
90
91%======================================================================
Andrew M. Kuchling1a420252003-11-08 15:58:49 +000092\section{PEP 322: Reverse Iteration}
Fred Drakeed0fa3d2003-07-30 19:14:09 +000093
Fred Drake56fcc232004-05-06 02:55:35 +000094A new built-in function, \function{reversed(\var{seq})}, takes a sequence
Andrew M. Kuchling1a420252003-11-08 15:58:49 +000095and returns an iterator that returns the elements of the sequence
96in reverse order.
97
98\begin{verbatim}
Raymond Hettingerbc3cba22003-11-12 16:39:30 +000099>>> for i in reversed(xrange(1,4)):
Andrew M. Kuchling1a420252003-11-08 15:58:49 +0000100... print i
101...
1023
1032
1041
105\end{verbatim}
106
Raymond Hettingerbc3cba22003-11-12 16:39:30 +0000107Compared to extended slicing, \code{range(1,4)[::-1]}, \function{reversed()}
108is easier to read, runs faster, and uses substantially less memory.
109
Andrew M. Kuchling1a420252003-11-08 15:58:49 +0000110Note that \function{reversed()} only accepts sequences, not arbitrary
Raymond Hettingerbc3cba22003-11-12 16:39:30 +0000111iterators. If you want to reverse an iterator, first convert it to
112a list with \function{list()}.
Andrew M. Kuchling1a420252003-11-08 15:58:49 +0000113
114\begin{verbatim}
Andrew M. Kuchling44a31e12004-01-01 18:33:34 +0000115>>> input= open('/etc/passwd', 'r')
116>>> for line in reversed(list(input)):
Andrew M. Kuchling1a420252003-11-08 15:58:49 +0000117... print line
118...
119root:*:0:0:System Administrator:/var/root:/bin/tcsh
120 ...
121\end{verbatim}
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000122
Andrew M. Kuchlingf7a6b672003-11-08 16:05:37 +0000123\begin{seealso}
124\seepep{322}{Reverse Iteration}{Written and implemented by Raymond Hettinger.}
125
126\end{seealso}
127
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000128
129%======================================================================
130\section{Other Language Changes}
131
132Here are all of the changes that Python 2.4 makes to the core Python
133language.
134
135\begin{itemize}
Raymond Hettingerd4462302003-11-26 17:52:45 +0000136
Raymond Hettinger31017ae2004-03-04 08:25:44 +0000137\item The \method{dict.update()} method now accepts the same
138argument forms as the \class{dict} constructor. This includes any
139mapping, any iterable of key/value pairs, and/or keyword arguments.
140
Raymond Hettingerd4462302003-11-26 17:52:45 +0000141\item The string methods, \method{ljust()}, \method{rjust()}, and
Andrew M. Kuchling67087562003-11-26 18:03:48 +0000142\method{center()} now take an optional argument for specifying a
Raymond Hettingerd4462302003-11-26 17:52:45 +0000143fill character other than a space.
144
Andrew M. Kuchling35f2b052003-12-18 13:28:13 +0000145\item Strings also gained an \method{rsplit()} method that
Raymond Hettingered54d912003-12-31 01:59:18 +0000146works like the \method{split()} method but splits from the end of
Andrew M. Kuchling44a31e12004-01-01 18:33:34 +0000147the string.
Andrew M. Kuchling35f2b052003-12-18 13:28:13 +0000148
149\begin{verbatim}
Raymond Hettinger7a6d2972004-02-13 19:00:07 +0000150>>> 'www.python.org'.split('.', 1)
151['www', 'python.org']
152'www.python.org'.rsplit('.', 1)
153['www.python', 'org']
154\end{verbatim}
Raymond Hettinger97ef8de2004-01-05 00:29:57 +0000155
Andrew M. Kuchling2fb4d512003-10-21 12:31:16 +0000156\item The \method{sort()} method of lists gained three keyword
157arguments, \var{cmp}, \var{key}, and \var{reverse}. These arguments
158make some common usages of \method{sort()} simpler. All are optional.
159
160\var{cmp} is the same as the previous single argument to
161\method{sort()}; if provided, the value should be a comparison
162function that takes two arguments and returns -1, 0, or +1 depending
163on how the arguments compare.
164
165\var{key} should be a single-argument function that takes a list
166element and returns a comparison key for the element. The list is
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000167then sorted using the comparison keys. The following example sorts a
168list case-insensitively:
Andrew M. Kuchling2fb4d512003-10-21 12:31:16 +0000169
170\begin{verbatim}
171>>> L = ['A', 'b', 'c', 'D']
172>>> L.sort() # Case-sensitive sort
173>>> L
174['A', 'D', 'b', 'c']
175>>> L.sort(key=lambda x: x.lower())
176>>> L
177['A', 'b', 'c', 'D']
178>>> L.sort(cmp=lambda x,y: cmp(x.lower(), y.lower()))
179>>> L
180['A', 'b', 'c', 'D']
181\end{verbatim}
182
183The last example, which uses the \var{cmp} parameter, is the old way
Raymond Hettingered54d912003-12-31 01:59:18 +0000184to perform a case-insensitive sort. It works but is slower than
Andrew M. Kuchling2fb4d512003-10-21 12:31:16 +0000185using a \var{key} parameter. Using \var{key} results in calling the
186\method{lower()} method once for each element in the list while using
187\var{cmp} will call the method twice for each comparison.
188
Andrew M. Kuchling981a9182003-11-13 21:33:26 +0000189For simple key functions and comparison functions, it is often
190possible to avoid a \keyword{lambda} expression by using an unbound
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000191method instead. For example, the above case-insensitive sort is best
192coded as:
193
194\begin{verbatim}
195>>> L.sort(key=str.lower)
196>>> L
197['A', 'b', 'c', 'D']
198\end{verbatim}
199
Andrew M. Kuchling2fb4d512003-10-21 12:31:16 +0000200The \var{reverse} parameter should have a Boolean value. If the value is
201\constant{True}, the list will be sorted into reverse order. Instead
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000202of \code{L.sort(lambda x,y: cmp(y.score, x.score))}, you can now write:
203\code{L.sort(key = lambda x: x.score, reverse=True)}.
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000204
Andrew M. Kuchling981a9182003-11-13 21:33:26 +0000205The results of sorting are now guaranteed to be stable. This means
206that two entries with equal keys will be returned in the same order as
207they were input. For example, you can sort a list of people by name,
208and then sort the list by age, resulting in a list sorted by age where
209people with the same age are in name-sorted order.
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000210
Fred Drake56fcc232004-05-06 02:55:35 +0000211\item There is a new built-in function
212\function{sorted(\var{iterable})} that works like the in-place
213\method{list.sort()} method but has been made suitable for use in
214expressions. The differences are:
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000215 \begin{itemize}
Raymond Hettinger7d1dd042003-11-12 16:42:10 +0000216 \item the input may be any iterable;
217 \item a newly formed copy is sorted, leaving the original intact; and
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000218 \item the expression returns the new sorted copy
219 \end{itemize}
Andrew M. Kuchling1a420252003-11-08 15:58:49 +0000220
221\begin{verbatim}
222>>> L = [9,7,8,3,2,4,1,6,5]
Raymond Hettinger64958a12003-12-17 20:43:33 +0000223>>> [10+i for i in sorted(L)] # usable in a list comprehension
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000224[11, 12, 13, 14, 15, 16, 17, 18, 19]
225>>> L = [9,7,8,3,2,4,1,6,5] # original is left unchanged
226[9,7,8,3,2,4,1,6,5]
Raymond Hettingerd4462302003-11-26 17:52:45 +0000227
Raymond Hettinger64958a12003-12-17 20:43:33 +0000228>>> sorted('Monte Python') # any iterable may be an input
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000229[' ', 'M', 'P', 'e', 'h', 'n', 'n', 'o', 'o', 't', 't', 'y']
Raymond Hettingerd4462302003-11-26 17:52:45 +0000230
231>>> # List the contents of a dict sorted by key values
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000232>>> colormap = dict(red=1, blue=2, green=3, black=4, yellow=5)
Raymond Hettinger64958a12003-12-17 20:43:33 +0000233>>> for k, v in sorted(colormap.iteritems()):
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000234... print k, v
235...
236black 4
237blue 2
238green 3
239red 1
240yellow 5
241
Andrew M. Kuchling1a420252003-11-08 15:58:49 +0000242\end{verbatim}
243
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000244\item The \function{zip()} built-in function and \function{itertools.izip()}
Andrew M. Kuchling67087562003-11-26 18:03:48 +0000245 now return an empty list instead of raising a \exception{TypeError}
Andrew M. Kuchling44a31e12004-01-01 18:33:34 +0000246 exception if called with no arguments. This makes them more
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000247 suitable for use with variable length argument lists:
248
249\begin{verbatim}
250>>> def transpose(array):
251... return zip(*array)
252...
253>>> transpose([(1,2,3), (4,5,6)])
254[(1, 4), (2, 5), (3, 6)]
255>>> transpose([])
256[]
257\end{verbatim}
Andrew M. Kuchling6aedcfc2003-10-21 12:48:23 +0000258
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000259\end{itemize}
260
261
262%======================================================================
263\subsection{Optimizations}
264
265\begin{itemize}
266
Raymond Hettingerb7d05db2004-03-08 07:25:05 +0000267\item The inner loops for \class{list} and \class{tuple} slicing
Raymond Hettingerade08ea2004-03-18 09:48:12 +0000268 were optimized and now run about one-third faster. The inner
269 loops were also optimized for \class{dict} with performance
270 boosts to \method{keys()}, \method{values()}, \method{items()},
Fred Drake9de0a2b2004-03-20 08:13:32 +0000271\method{iterkeys()}, \method{itervalues()}, and \method{iteritems()}.
Raymond Hettingerb7d05db2004-03-08 07:25:05 +0000272
Raymond Hettinger7a6d2972004-02-13 19:00:07 +0000273\item The machinery for growing and shrinking lists was optimized
Raymond Hettingerab517d22004-02-14 18:34:46 +0000274 for speed and for space efficiency. Small lists (under eight elements)
275 never over-allocate by more than three elements. Large lists do not
Raymond Hettinger7a6d2972004-02-13 19:00:07 +0000276 over-allocate by more than 1/8th. Appending and popping from lists
277 now runs faster due to more efficient code paths and less frequent
278 use of the underlying system realloc(). List comprehensions also
279 benefit. The amount of improvement varies between systems and shows
280 the greatest improvement on systems with poor realloc() implementations.
Raymond Hettinger79b5cf12004-02-17 10:46:32 +0000281 \method{list.extend()} was also optimized and no longer converts its
282 argument into a temporary list prior to extending the base list.
Raymond Hettinger7a6d2972004-02-13 19:00:07 +0000283
Raymond Hettinger97ef8de2004-01-05 00:29:57 +0000284\item \function{list()}, \function{tuple()}, \function{map()},
285 \function{filter()}, and \function{zip()} now run several times
286 faster with non-sequence arguments that supply a \method{__len__()}
287 method. Previously, the pre-sizing optimization only applied to
288 sequence arguments.
289
Raymond Hettinger23a0f4e2004-01-05 08:15:20 +0000290\item The methods \method{list.__getitem__()},
Raymond Hettinger97ef8de2004-01-05 00:29:57 +0000291 \method{dict.__getitem__()}, and \method{dict.__contains__()} are
292 are now implemented as \class{method_descriptor} objects rather
293 than \class{wrapper_descriptor} objects. This form of optimized
294 access doubles their performance and makes them more suitable for
Raymond Hettinger23a0f4e2004-01-05 08:15:20 +0000295 use as arguments to functionals:
296 \samp{map(mydict.__getitem__, keylist)}.
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000297
Raymond Hettingerdd80f762004-03-07 07:31:06 +0000298\item Added an newcode opcode, \code{LIST_APPEND}, that simplifies
299 the generated bytecode for list comprehensions and speeds them up
300 by about a third.
301
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000302\end{itemize}
303
304The net result of the 2.4 optimizations is that Python 2.4 runs the
305pystone benchmark around XX\% faster than Python 2.3 and YY\% faster
306than Python 2.2.
307
308
309%======================================================================
310\section{New, Improved, and Deprecated Modules}
311
312As usual, Python's standard library received a number of enhancements and
313bug fixes. Here's a partial list of the most notable changes, sorted
314alphabetically by module name. Consult the
315\file{Misc/NEWS} file in the source tree for a more
316complete list of changes, or look through the CVS logs for all the
317details.
318
319\begin{itemize}
320
Andrew M. Kuchling69f31eb2003-08-13 23:11:04 +0000321\item The \module{curses} modules now supports the ncurses extension
322 \function{use_default_colors()}. On platforms where the terminal
323 supports transparency, this makes it possible to use a transparent background.
324 (Contributed by J\"org Lehmann.)
Andrew M. Kuchling6aedcfc2003-10-21 12:48:23 +0000325
Raymond Hettinger0c410272004-01-05 10:13:35 +0000326\item The \module{bisect} module now has an underlying C implementation
327 for improved performance.
328 (Contributed by Dmitry Vasiliev.)
329
Andrew M. Kuchling5303a962004-01-18 15:55:51 +0000330\item The CJKCodecs collections of East Asian codecs, maintained
331by Hye-Shik Chang, was integrated into 2.4.
332The new encodings are:
333
334\begin{itemize}
335 \item Chinese (PRC): gb2312, gbk, gb18030, hz
336 \item Chinese (ROC): big5, cp950
337 \item Japanese: cp932, shift-jis, shift-jisx0213, euc-jp,
338euc-jisx0213, iso-2022-jp, iso-2022-jp-1, iso-2022-jp-2,
339 iso-2022-jp-3, iso-2022-jp-ext
340 \item Korean: cp949, euc-kr, johab, iso-2022-kr
341\end{itemize}
342
Andrew M. Kuchlingfd0e4942004-02-09 13:23:34 +0000343\item There is a new \module{collections} module for
344 various specialized collection datatypes.
345 Currently it contains just one type, \class{deque},
346 a double-ended queue that supports efficiently adding and removing
347 elements from either end.
Raymond Hettinger756b3f32004-01-29 06:37:52 +0000348
349\begin{verbatim}
350>>> from collections import deque
351>>> d = deque('ghi') # make a new deque with three items
352>>> d.append('j') # add a new entry to the right side
353>>> d.appendleft('f') # add a new entry to the left side
354>>> d # show the representation of the deque
355deque(['f', 'g', 'h', 'i', 'j'])
356>>> d.pop() # return and remove the rightmost item
357'j'
358>>> d.popleft() # return and remove the leftmost item
359'f'
360>>> list(d) # list the contents of the deque
361['g', 'h', 'i']
362>>> 'h' in d # search the deque
363True
364\end{verbatim}
365
Andrew M. Kuchlingfd0e4942004-02-09 13:23:34 +0000366Several modules now take advantage of \class{collections.deque} for
Raymond Hettinger756b3f32004-01-29 06:37:52 +0000367improved performance: \module{Queue}, \module{mutex}, \module{shlex}
368\module{threading}, and \module{pydoc}.
Andrew M. Kuchling5303a962004-01-18 15:55:51 +0000369
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000370\item The \module{heapq} module has been converted to C. The resulting
Andrew M. Kuchlingfd0e4942004-02-09 13:23:34 +0000371 tenfold improvement in speed makes the module suitable for handling
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000372 high volumes of data.
Andrew M. Kuchling1a420252003-11-08 15:58:49 +0000373
Andrew M. Kuchlingdff9dbd2003-11-20 22:22:19 +0000374\item The \module{imaplib} module now supports IMAP's THREAD command.
375(Contributed by Yves Dionne.)
376
Andrew M. Kuchlingad809552003-12-06 23:19:23 +0000377\item The \module{itertools} module gained a
378 \function{groupby(\var{iterable}\optional{, \var{func}})} function,
379 inspired by the GROUP BY clause from SQL.
380 \var{iterable} returns a succession of elements, and the optional
381 \var{func} is a function that takes an element and returns a key
382 value; if omitted, the key is simply the element itself.
383 \function{groupby()} then groups the elements into subsequences
384 which have matching values of the key, and returns a series of 2-tuples
385 containing the key value and an iterator over the subsequence.
386
387Here's an example. The \var{key} function simply returns whether a
388number is even or odd, so the result of \function{groupby()} is to
389return consecutive runs of odd or even numbers.
390
391\begin{verbatim}
392>>> import itertools
393>>> L = [2,4,6, 7,8,9,11, 12, 14]
394>>> for key_val, it in itertools.groupby(L, lambda x: x % 2):
395... print key_val, list(it)
396...
3970 [2, 4, 6]
3981 [7]
3990 [8]
4001 [9, 11]
4010 [12, 14]
402>>>
403\end{verbatim}
404
Raymond Hettingerfeb78c92003-12-12 13:13:47 +0000405Like its SQL counterpart, \function{groupby()} is typically used with
406sorted input. The logic for \function{groupby()} is similar to the
407\UNIX{} \code{uniq} filter which makes it handy for eliminating,
408counting, or identifying duplicate elements:
409
410\begin{verbatim}
411>>> word = 'abracadabra'
Raymond Hettingered54d912003-12-31 01:59:18 +0000412>>> letters = sorted(word) # Turn string into a sorted list of letters
Raymond Hettinger64958a12003-12-17 20:43:33 +0000413>>> letters
Andrew M. Kuchling4612bc52003-12-16 20:59:37 +0000414['a', 'a', 'a', 'a', 'a', 'b', 'b', 'c', 'd', 'r', 'r']
Raymond Hettingered54d912003-12-31 01:59:18 +0000415>>> [k for k, g in groupby(letters)] # List unique letters
Raymond Hettingerfeb78c92003-12-12 13:13:47 +0000416['a', 'b', 'c', 'd', 'r']
Raymond Hettingered54d912003-12-31 01:59:18 +0000417>>> [(k, len(list(g))) for k, g in groupby(letters)] # Count letter occurences
Raymond Hettingerfeb78c92003-12-12 13:13:47 +0000418[('a', 5), ('b', 2), ('c', 1), ('d', 1), ('r', 2)]
Raymond Hettingered54d912003-12-31 01:59:18 +0000419>>> [k for k, g in groupby(letters) if len(list(g)) > 1] # List duplicated letters
Raymond Hettingerfeb78c92003-12-12 13:13:47 +0000420['a', 'b', 'r']
421\end{verbatim}
422
Raymond Hettingered54d912003-12-31 01:59:18 +0000423\item \module{itertools} also gained a function named
424\function{tee(\var{iterator}, \var{N})} that returns \var{N} independent
425iterators that replicate \var{iterator}. If \var{N} is omitted, the
426default is 2.
Andrew M. Kuchling35f2b052003-12-18 13:28:13 +0000427
428\begin{verbatim}
429>>> L = [1,2,3]
430>>> i1, i2 = itertools.tee(L)
431>>> i1,i2
432(<itertools.tee object at 0x402c2080>, <itertools.tee object at 0x402c2090>)
Raymond Hettingered54d912003-12-31 01:59:18 +0000433>>> list(i1) # Run the first iterator to exhaustion
Andrew M. Kuchling35f2b052003-12-18 13:28:13 +0000434[1, 2, 3]
Raymond Hettingered54d912003-12-31 01:59:18 +0000435>>> list(i2) # Run the second iterator to exhaustion
Andrew M. Kuchling35f2b052003-12-18 13:28:13 +0000436[1, 2, 3]
437>\end{verbatim}
438
439Note that \function{tee()} has to keep copies of the values returned
Raymond Hettingered54d912003-12-31 01:59:18 +0000440by the iterator; in the worst case, it may need to keep all of them.
Andrew M. Kuchling44a31e12004-01-01 18:33:34 +0000441This should therefore be used carefully if the leading iterator
Raymond Hettingered54d912003-12-31 01:59:18 +0000442can run far ahead of the trailing iterator in a long stream of inputs.
Andrew M. Kuchling44a31e12004-01-01 18:33:34 +0000443If the separation is large, then it becomes preferable to use
Raymond Hettingered54d912003-12-31 01:59:18 +0000444\function{list()} instead. When the iterators track closely with one
445another, \function{tee()} is ideal. Possible applications include
446bookmarking, windowing, or lookahead iterators.
Andrew M. Kuchling35f2b052003-12-18 13:28:13 +0000447
Andrew M. Kuchlingdff9dbd2003-11-20 22:22:19 +0000448\item A new \function{getsid()} function was added to the
449\module{posix} module that underlies the \module{os} module.
450(Contributed by J. Raynor.)
451
Andrew M. Kuchling35f2b052003-12-18 13:28:13 +0000452\item The \module{operator} module gained two new functions,
453\function{attrgetter(\var{attr})} and \function{itemgetter(\var{index})}.
454Both functions return callables that take a single argument and return
Raymond Hettingered54d912003-12-31 01:59:18 +0000455the corresponding attribute or item; these callables make excellent
456data extractors when used with \function{map()} or \function{sorted()}.
457For example:
Andrew M. Kuchling35f2b052003-12-18 13:28:13 +0000458
459\begin{verbatim}
Raymond Hettingered54d912003-12-31 01:59:18 +0000460>>> L = [('c', 2), ('d', 1), ('a', 4), ('b', 3)]
Andrew M. Kuchling35f2b052003-12-18 13:28:13 +0000461>>> map(operator.itemgetter(0), L)
462['c', 'd', 'a', 'b']
463>>> map(operator.itemgetter(1), L)
Raymond Hettingered54d912003-12-31 01:59:18 +0000464[2, 1, 4, 3]
465>>> sorted(L, key=operator.itemgetter(1)) # Sort list by second tuple item
466[('d', 1), ('c', 2), ('b', 3), ('a', 4)]
Andrew M. Kuchling35f2b052003-12-18 13:28:13 +0000467\end{verbatim}
468
Andrew M. Kuchling6aedcfc2003-10-21 12:48:23 +0000469\item The \module{random} module has a new method called \method{getrandbits(N)}
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000470 which returns an N-bit long integer. This method supports the existing
471 \method{randrange()} method, making it possible to efficiently generate
Andrew M. Kuchling44a31e12004-01-01 18:33:34 +0000472 arbitrarily large random numbers.
Andrew M. Kuchling6aedcfc2003-10-21 12:48:23 +0000473
474\item The regular expression language accepted by the \module{re} module
475 was extended with simple conditional expressions, written as
476 \code{(?(\var{group})\var{A}|\var{B})}. \var{group} is either a
477 numeric group ID or a group name defined with \code{(?P<group>...)}
478 earlier in the expression. If the specified group matched, the
479 regular expression pattern \var{A} will be tested against the string; if
480 the group didn't match, the pattern \var{B} will be used instead.
Andrew M. Kuchling69f31eb2003-08-13 23:11:04 +0000481
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000482\end{itemize}
483
484
485%======================================================================
486% whole new modules get described in \subsections here
487
488
489% ======================================================================
490\section{Build and C API Changes}
491
492Changes to Python's build process and to the C API include:
493
494\begin{itemize}
495
Andrew M. Kuchling6aedcfc2003-10-21 12:48:23 +0000496 \item Three new convenience macros were added for common return
497 values from extension functions: \csimplemacro{Py_RETURN_NONE},
498 \csimplemacro{Py_RETURN_TRUE}, and \csimplemacro{Py_RETURN_FALSE}.
499
Fred Drakece3caf22004-02-12 18:13:12 +0000500 \item A new function, \cfunction{PyTuple_Pack(\var{N}, \var{obj1},
501 \var{obj2}, ..., \var{objN})}, constructs tuples from a variable
502 length argument list of Python objects.
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000503
Fred Drakece3caf22004-02-12 18:13:12 +0000504 \item A new function, \cfunction{PyDict_Contains(\var{d}, \var{k})},
505 implements fast dictionary lookups without masking exceptions raised
506 during the look-up process.
Raymond Hettingerd4462302003-11-26 17:52:45 +0000507
Fred Drakece3caf22004-02-12 18:13:12 +0000508 \item A new method flag, \constant{METH_COEXISTS}, allows a function
Raymond Hettinger97ef8de2004-01-05 00:29:57 +0000509 defined in slots to co-exist with a PyCFunction having the same name.
510 This can halve the access to time to a method such as
511 \method{set.__contains__()}
512
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000513\end{itemize}
514
515
516%======================================================================
517\subsection{Port-Specific Changes}
518
Raymond Hettinger97ef8de2004-01-05 00:29:57 +0000519\begin{itemize}
520
521\item The Windows port now builds under MSVC++ 7.1 as well as version 6.
522
523\end{itemize}
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000524
525
526%======================================================================
527\section{Other Changes and Fixes \label{section-other}}
528
529As usual, there were a bunch of other improvements and bugfixes
530scattered throughout the source tree. A search through the CVS change
531logs finds there were XXX patches applied and YYY bugs fixed between
532Python 2.3 and 2.4. Both figures are likely to be underestimates.
533
534Some of the more notable changes are:
535
536\begin{itemize}
537
Raymond Hettinger97ef8de2004-01-05 00:29:57 +0000538\item The \module{timeit} module now automatically disables periodic
539 garbarge collection during the timing loop. This change makes
540 consecutive timings more comparable.
541
542\item The \module{base64} module now has more complete RFC 3548 support
543 for Base64, Base32, and Base16 encoding and decoding, including
544 optional case folding and optional alternative alphabets.
545 (Contributed by Barry Warsaw.)
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000546
547\end{itemize}
548
549
550%======================================================================
551\section{Porting to Python 2.4}
552
553This section lists previously described changes that may require
554changes to your code:
555
556\begin{itemize}
557
Raymond Hettinger607c00f2003-11-12 16:27:50 +0000558\item The \function{zip()} built-in function and \function{itertools.izip()}
559 now return an empty list instead of raising a \exception{TypeError}
560 exception if called with no arguments.
Andrew M. Kuchling6aedcfc2003-10-21 12:48:23 +0000561
562\item \function{dircache.listdir()} now passes exceptions to the caller
563 instead of returning empty lists.
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000564
Fred Drake56fcc232004-05-06 02:55:35 +0000565\item \function{LexicalHandler.startDTD()} used to receive public and
566 system ID in the wrong order. This has been corrected; applications
567 relying on the wrong order need to be fixed.
Martin v. Löwis456ab1d2004-05-06 01:54:36 +0000568
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000569\end{itemize}
570
571
572%======================================================================
573\section{Acknowledgements \label{acks}}
574
575The author would like to thank the following people for offering
576suggestions, corrections and assistance with various drafts of this
Andrew M. Kuchling981a9182003-11-13 21:33:26 +0000577article: Raymond Hettinger.
Fred Drakeed0fa3d2003-07-30 19:14:09 +0000578
579\end{document}