blob: 2341d342b2c481ec05d8c008a6a2fe44446cc666 [file] [log] [blame]
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00001\documentclass{howto}
2
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00003\title{What's New in Python 2.0}
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +00004\release{0.05}
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +00005\author{A.M. Kuchling and Moshe Zadka}
6\authoraddress{\email{amk1@bigfoot.com}, \email{moshez@math.huji.ac.il} }
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +00007\begin{document}
8\maketitle\tableofcontents
9
10\section{Introduction}
11
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +000012{\large This is a draft document; please report inaccuracies and
13omissions to the authors. This document should not be treated as
Andrew M. Kuchling730067e2000-06-30 01:44:05 +000014definitive; features described here might be removed or changed during
15the beta cycle before the final release of Python 2.0.
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +000016}
17
Andrew M. Kuchling730067e2000-06-30 01:44:05 +000018A new release of Python, version 2.0, will be released some time this
Andrew M. Kuchling70ba3822000-07-01 00:13:30 +000019summer. Beta versions are already available from
20\url{http://www.pythonlabs.com/tech/python2.html}. This article
21covers the exciting new features in 2.0, highlights some other useful
22changes, and points out a few incompatible changes that may require
23rewriting code.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +000024
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000025Python's development never completely stops between releases, and a
26steady flow of bug fixes and improvements are always being submitted.
27A host of minor fixes, a few optimizations, additional docstrings, and
Andrew M. Kuchling730067e2000-06-30 01:44:05 +000028better error messages went into 2.0; to list them all would be
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000029impossible, but they're certainly significant. Consult the
30publicly-available CVS logs if you want to see the full list.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +000031
32% ======================================================================
33\section{Unicode}
34
Andrew M. Kuchling730067e2000-06-30 01:44:05 +000035The largest new feature in Python 2.0 is a new fundamental data type:
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000036Unicode strings. Unicode uses 16-bit numbers to represent characters
37instead of the 8-bit number used by ASCII, meaning that 65,536
38distinct characters can be supported.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +000039
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000040The final interface for Unicode support was arrived at through
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +000041countless often-stormy discussions on the python-dev mailing list, and
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +000042mostly implemented by Marc-Andr\'e Lemburg, based on a Unicode string
43type implementation by Fredrik Lundh. A detailed explanation of the
44interface is in the file \file{Misc/unicode.txt} in the Python source
45distribution; it's also available on the Web at
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +000046\url{http://starship.python.net/crew/lemburg/unicode-proposal.txt}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000047This article will simply cover the most significant points from the
48full interface.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +000049
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000050In Python source code, Unicode strings are written as
51\code{u"string"}. Arbitrary Unicode characters can be written using a
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +000052new escape sequence, \code{\e u\var{HHHH}}, where \var{HHHH} is a
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000534-digit hexadecimal number from 0000 to FFFF. The existing
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +000054\code{\e x\var{HHHH}} escape sequence can also be used, and octal
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000055escapes can be used for characters up to U+01FF, which is represented
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +000056by \code{\e 777}.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +000057
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000058Unicode strings, just like regular strings, are an immutable sequence
Andrew M. Kuchling662d76e2000-06-25 14:32:48 +000059type. They can be indexed and sliced, but not modified in place.
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +000060Unicode strings have an \method{encode( \optional{encoding} )} method
Andrew M. Kuchling662d76e2000-06-25 14:32:48 +000061that returns an 8-bit string in the desired encoding. Encodings are
62named by strings, such as \code{'ascii'}, \code{'utf-8'},
63\code{'iso-8859-1'}, or whatever. A codec API is defined for
64implementing and registering new encodings that are then available
65throughout a Python program. If an encoding isn't specified, the
66default encoding is usually 7-bit ASCII, though it can be changed for
67your Python installation by calling the
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +000068\function{sys.setdefaultencoding(\var{encoding})} function in a
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +000069customised version of \file{site.py}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000070
71Combining 8-bit and Unicode strings always coerces to Unicode, using
72the default ASCII encoding; the result of \code{'a' + u'bc'} is
Andrew M. Kuchling7f6270d2000-06-09 02:48:18 +000073\code{u'abc'}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000074
75New built-in functions have been added, and existing built-ins
76modified to support Unicode:
77
78\begin{itemize}
79\item \code{unichr(\var{ch})} returns a Unicode string 1 character
80long, containing the character \var{ch}.
81
82\item \code{ord(\var{u})}, where \var{u} is a 1-character regular or Unicode string, returns the number of the character as an integer.
83
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +000084\item \code{unicode(\var{string} \optional{, \var{encoding}}
85\optional{, \var{errors}} ) } creates a Unicode string from an 8-bit
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000086string. \code{encoding} is a string naming the encoding to use.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +000087The \code{errors} parameter specifies the treatment of characters that
88are invalid for the current encoding; passing \code{'strict'} as the
89value causes an exception to be raised on any encoding error, while
90\code{'ignore'} causes errors to be silently ignored and
91\code{'replace'} uses U+FFFD, the official replacement character, in
92case of any problems.
93
94\end{itemize}
95
96A new module, \module{unicodedata}, provides an interface to Unicode
97character properties. For example, \code{unicodedata.category(u'A')}
98returns the 2-character string 'Lu', the 'L' denoting it's a letter,
99and 'u' meaning that it's uppercase.
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000100\code{u.bidirectional(u'\e x0660')} returns 'AN', meaning that U+0660 is
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000101an Arabic number.
102
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000103The \module{codecs} module contains functions to look up existing encodings
104and register new ones. Unless you want to implement a
105new encoding, you'll most often use the
106\function{codecs.lookup(\var{encoding})} function, which returns a
1074-element tuple: \code{(\var{encode_func},
108\var{decode_func}, \var{stream_reader}, \var{stream_writer})}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000109
110\begin{itemize}
111\item \var{encode_func} is a function that takes a Unicode string, and
112returns a 2-tuple \code{(\var{string}, \var{length})}. \var{string}
113is an 8-bit string containing a portion (perhaps all) of the Unicode
Andrew M. Kuchling2d2dc9f2000-08-17 00:27:06 +0000114string converted into the given encoding, and \var{length} tells you
115how much of the Unicode string was converted.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000116
117\item \var{decode_func} is the mirror of \var{encode_func},
118taking a Unicode string and
119returns a 2-tuple \code{(\var{ustring}, \var{length})} containing a Unicode string
120and \var{length} telling you how much of the string was consumed.
121
122\item \var{stream_reader} is a class that supports decoding input from
123a stream. \var{stream_reader(\var{file_obj})} returns an object that
124supports the \method{read()}, \method{readline()}, and
125\method{readlines()} methods. These methods will all translate from
126the given encoding and return Unicode strings.
127
128\item \var{stream_writer}, similarly, is a class that supports
129encoding output to a stream. \var{stream_writer(\var{file_obj})}
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000130returns an object that supports the \method{write()} and
131\method{writelines()} methods. These methods expect Unicode strings,
132translating them to the given encoding on output.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000133\end{itemize}
134
135For example, the following code writes a Unicode string into a file,
136encoding it as UTF-8:
137
138\begin{verbatim}
139import codecs
140
141unistr = u'\u0660\u2000ab ...'
142
143(UTF8_encode, UTF8_decode,
144 UTF8_streamreader, UTF8_streamwriter) = codecs.lookup('UTF-8')
145
146output = UTF8_streamwriter( open( '/tmp/output', 'wb') )
147output.write( unistr )
148output.close()
149\end{verbatim}
150
151The following code would then read UTF-8 input from the file:
152
153\begin{verbatim}
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000154input = UTF8_streamreader( open( '/tmp/output', 'rb') )
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000155print repr(input.read())
156input.close()
157\end{verbatim}
158
159Unicode-aware regular expressions are available through the
160\module{re} module, which has a new underlying implementation called
161SRE written by Fredrik Lundh of Secret Labs AB.
162
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +0000163A \code{-U} command line option was added which causes the Python
164compiler to interpret all string literals as Unicode string literals.
165This is intended to be used in testing and future-proofing your Python
166code, since some future version of Python may drop support for 8-bit
167strings and provide only Unicode strings.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000168
169% ======================================================================
Andrew M. Kuchling2d2dc9f2000-08-17 00:27:06 +0000170\section{List Comprehensions}
171
172Lists are a workhorse data type in Python, and many programs
173manipulate a list at some point. Two common operations on lists are
174to loop over them, and either pick out the elements that meet a
175certain criterion, or apply some function to each element. For
176example, given a list of strings, you might want to pull out all the
177strings containing a given substring, or strip off trailing whitespace
178from each line.
179
180The existing \function{map()} and \function{filter()} functions can be
181used for this purpose, but they require a function as one of their
182arguments. This is fine if there's an existing built-in function that
183can be passed directly, but if there isn't, you have to create a
184little function to do the required work, and Python's scoping rules
185make the result ugly if the little function needs additional
186information. Take the first example in the previous paragraph,
187finding all the strings in the list containing a given substring. You
188could write the following to do it:
189
190\begin{verbatim}
191# Given the list L, make a list of all strings
192# containing the substring S.
193sublist = filter( lambda s, substring=S:
194 string.find(s, substring) != -1,
195 L)
196\end{verbatim}
197
198Because of Python's scoping rules, a default argument is used so that
199the anonymous function created by the \keyword{lambda} statement knows
200what substring is being searched for. List comprehensions make this
201cleaner:
202
203\begin{verbatim}
204sublist = [ s for s in L if string.find(s, S) != -1 ]
205\end{verbatim}
206
207List comprehensions have the form:
208
209\begin{verbatim}
210[ expression for expr in sequence1
211 for expr2 in sequence2 ...
212 for exprN in sequenceN
213 if condition
214\end{verbatim}
215
216The \keyword{for}...\keyword{in} clauses contain the sequences to be
217iterated over. The sequences do not have to be the same length,
218because they are \emph{not} iterated over in parallel, but
219from left to right; this is explained more clearly in the following
220paragraphs. The elements of the generated list will be the successive
221values of \var{expression}. The final \keyword{if} clause is
222optional; if present, \var{expression} is only evaluated and added to
223the result if \var{condition} is true.
224
225To make the semantics very clear, a list comprehension is equivalent
226to the following Python code:
227
228\begin{verbatim}
229for expr1 in sequence1:
230 for expr2 in sequence2:
231 ...
232 for exprN in sequenceN:
233 if (condition):
234 # Append the value of
235 # the expression to the
236 # resulting list.
237\end{verbatim}
238
239This means that when there are \keyword{for}...\keyword{in} clauses,
240the resulting list will be equal to the product of the lengths of all
241the sequences. If you have two lists of length 3, the output list is
2429 elements long:
243
244\begin{verbatim}
245seq1 = 'abc'
246seq2 = (1,2,3)
247>>> [ (x,y) for x in seq1 for y in seq2]
248[('a', 1), ('a', 2), ('a', 3), ('b', 1), ('b', 2), ('b', 3), ('c', 1),
249('c', 2), ('c', 3)]
250\end{verbatim}
251
252To avoid introducing an ambiguity into Python's grammar, if
253\var{expression} is creating a tuple, it must be surrounded with
254parentheses. The first list comprehension below is a syntax error,
255while the second one is correct:
256
257\begin{verbatim}
258# Syntax error
259[ x,y for x in seq1 for y in seq2]
260# Correct
261[ (x,y) for x in seq1 for y in seq2]
262\end{verbatim}
263
Andrew M. Kuchling2d2dc9f2000-08-17 00:27:06 +0000264The idea of list comprehensions originally comes from the functional
265programming language Haskell (\url{http://www.haskell.org}). Greg
266Ewing argued most effectively for adding them to Python and wrote the
267initial list comprehension patch, which was then discussed for a
268seemingly endless time on the python-dev mailing list and kept
269up-to-date by Skip Montanaro.
270
Andrew M. Kuchling2d2dc9f2000-08-17 00:27:06 +0000271% ======================================================================
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000272\section{Augmented Assignment}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000273
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000274Augmented assignment operators, another long-requested feature, have
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000275been added to Python 2.0. Augmented assignment operators include
276\code{+=}, \code{-=}, \code{*=}, and so forth. For example, the
277statement \code{a += 2} increments the value of the variable
278\code{a} by 2, equivalent to the slightly lengthier \code{a = a + 2}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000279
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000280The full list of supported assignment operators is \code{+=},
281\code{-=}, \code{*=}, \code{/=}, \code{\%=}, \code{**=}, \code{\&=},
Andrew M. Kuchling3cdb5762000-08-30 12:55:42 +0000282\code{|=}, \verb|^=|, \code{>>=}, and \code{<<=}. Python classes can
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000283override the augmented assignment operators by defining methods named
284\method{__iadd__}, \method{__isub__}, etc. For example, the following
285\class{Number} class stores a number and supports using += to create a
286new instance with an incremented value.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000287
288\begin{verbatim}
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000289class Number:
290 def __init__(self, value):
291 self.value = value
292 def __iadd__(self, increment):
293 return Number( self.value + increment)
294
295n = Number(5)
296n += 3
297print n.value
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000298\end{verbatim}
299
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000300The \method{__iadd__} special method is called with the value of the
301increment, and should return a new instance with an appropriately
302modified value; this return value is bound as the new value of the
303variable on the left-hand side.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000304
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000305Augmented assignment operators were first introduced in the C
306programming language, and most C-derived languages, such as
307\program{awk}, C++, Java, Perl, and PHP also support them. The augmented
308assignment patch was implemented by Thomas Wouters.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000309
310% ======================================================================
311\section{String Methods}
312
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000313Until now string-manipulation functionality was in the \module{string}
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000314module, which was usually a front-end for the \module{strop}
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000315module written in C. The addition of Unicode posed a difficulty for
316the \module{strop} module, because the functions would all need to be
317rewritten in order to accept either 8-bit or Unicode strings. For
318functions such as \function{string.replace()}, which takes 3 string
319arguments, that means eight possible permutations, and correspondingly
320complicated code.
321
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000322Instead, Python 2.0 pushes the problem onto the string type, making
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000323string manipulation functionality available through methods on both
3248-bit strings and Unicode strings.
325
326\begin{verbatim}
327>>> 'andrew'.capitalize()
328'Andrew'
329>>> 'hostname'.replace('os', 'linux')
330'hlinuxtname'
331>>> 'moshe'.find('sh')
3322
333\end{verbatim}
334
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000335One thing that hasn't changed, a noteworthy April Fools' joke
336notwithstanding, is that Python strings are immutable. Thus, the
337string methods return new strings, and do not modify the string on
338which they operate.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000339
340The old \module{string} module is still around for backwards
341compatibility, but it mostly acts as a front-end to the new string
342methods.
343
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000344Two methods which have no parallel in pre-2.0 versions, although they
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000345did exist in JPython for quite some time, are \method{startswith()}
346and \method{endswith}. \code{s.startswith(t)} is equivalent to \code{s[:len(t)]
347== t}, while \code{s.endswith(t)} is equivalent to \code{s[-len(t):] == t}.
348
Andrew M. Kuchlingfed4f1e2000-07-01 12:33:43 +0000349One other method which deserves special mention is \method{join}. The
350\method{join} method of a string receives one parameter, a sequence of
351strings, and is equivalent to the \function{string.join} function from
352the old \module{string} module, with the arguments reversed. In other
353words, \code{s.join(seq)} is equivalent to the old
354\code{string.join(seq, s)}.
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000355
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000356% ======================================================================
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +0000357\section{Optional Collection of Cycles}
358
359The C implementation of Python uses reference counting to implement
360garbage collection. Every Python object maintains a count of the
361number of references pointing to itself, and adjusts the count as
362references are created or destroyed. Once the reference count reaches
363zero, the object is no longer accessible, since you need to have a
364reference to an object to access it, and if the count is zero, no
365references exist any longer.
366
367Reference counting has some pleasant properties: it's easy to
368understand and implement, and the resulting implementation is
369portable, fairly fast, and reacts well with other libraries that
370implement their own memory handling schemes. The major problem with
371reference counting is that it sometimes doesn't realise that objects
372are no longer accessible, resulting in a memory leak. This happens
373when there are cycles of references.
374
375Consider the simplest possible cycle,
376a class instance which has a reference to itself:
377
378\begin{verbatim}
379instance = SomeClass()
380instance.myself = instance
381\end{verbatim}
382
383After the above two lines of code have been executed, the reference
384count of \code{instance} is 2; one reference is from the variable
385named \samp{'instance'}, and the other is from the \samp{myself}
386attribute of the instance.
387
388If the next line of code is \code{del instance}, what happens? The
389reference count of \code{instance} is decreased by 1, so it has a
390reference count of 1; the reference in the \samp{myself} attribute
391still exists. Yet the instance is no longer accessible through Python
392code, and it could be deleted. Several objects can participate in a
393cycle if they have references to each other, causing all of the
394objects to be leaked.
395
396An experimental step has been made toward fixing this problem. When
397compiling Python, the \verb|--with-cycle-gc| option can be specified.
398This causes a cycle detection algorithm to be periodically executed,
399which looks for inaccessible cycles and deletes the objects involved.
400A new \module{gc} module provides functions to perform a garbage
401collection, obtain debugging statistics, and tuning the collector's parameters.
402
403Why isn't cycle detection enabled by default? Running the cycle detection
404algorithm takes some time, and some tuning will be required to
405minimize the overhead cost. It's not yet obvious how much performance
406is lost, because benchmarking this is tricky and depends crucially
407on how often the program creates and destroys objects.
408
409Several people tackled this problem and contributed to a solution. An
410early implementation of the cycle detection approach was written by
411Toby Kelsey. The current algorithm was suggested by Eric Tiedemann
412during a visit to CNRI, and Guido van Rossum and Neil Schemenauer
413wrote two different implementations, which were later integrated by
414Neil. Lots of other people offered suggestions along the way; the
415March 2000 archives of the python-dev mailing list contain most of the
416relevant discussion, especially in the threads titled ``Reference
417cycle collection for Python'' and ``Finalization again''.
418
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +0000419% ======================================================================
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000420\section{Other Core Changes}
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +0000421
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000422Various minor changes have been made to Python's syntax and built-in
423functions. None of the changes are very far-reaching, but they're
424handy conveniences.
425
426\subsection{Minor Language Changes}
427
428A new syntax makes it more convenient to call a given function
429with a tuple of arguments and/or a dictionary of keyword arguments.
430In Python 1.5 and earlier, you'd use the \function{apply()}
431built-in function: \code{apply(f, \var{args}, \var{kw})} calls the
432function \function{f()} with the argument tuple \var{args} and the
433keyword arguments in the dictionary \var{kw}. \function{apply()}
434is the same in 2.0, but thanks to a patch from
435Greg Ewing, \code{f(*\var{args}, **\var{kw})} as a shorter
436and clearer way to achieve the same effect. This syntax is
437symmetrical with the syntax for defining functions:
438
439\begin{verbatim}
440def f(*args, **kw):
441 # args is a tuple of positional args,
442 # kw is a dictionary of keyword args
443 ...
444\end{verbatim}
445
446The \keyword{print} statement can now have its output directed to a
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000447file-like object by following the \keyword{print} with
448\verb|>> file|, similar to the redirection operator in Unix shells.
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000449Previously you'd either have to use the \method{write()} method of the
450file-like object, which lacks the convenience and simplicity of
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000451\keyword{print}, or you could assign a new value to
452\code{sys.stdout} and then restore the old value. For sending output to standard error,
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000453it's much easier to write this:
454
455\begin{verbatim}
456print >> sys.stderr, "Warning: action field not supplied"
457\end{verbatim}
458
459Modules can now be renamed on importing them, using the syntax
460\code{import \var{module} as \var{name}} or \code{from \var{module}
461import \var{name} as \var{othername}}. The patch was submitted by
462Thomas Wouters.
463
464A new format style is available when using the \code{\%} operator;
465'\%r' will insert the \function{repr()} of its argument. This was
466also added from symmetry considerations, this time for symmetry with
467the existing '\%s' format style, which inserts the \function{str()} of
468its argument. For example, \code{'\%r \%s' \% ('abc', 'abc')} returns a
469string containing \verb|'abc' abc|.
470
471Previously there was no way to implement a class that overrode
472Python's built-in \keyword{in} operator and implemented a custom
473version. \code{\var{obj} in \var{seq}} returns true if \var{obj} is
474present in the sequence \var{seq}; Python computes this by simply
475trying every index of the sequence until either \var{obj} is found or
476an \exception{IndexError} is encountered. Moshe Zadka contributed a
477patch which adds a \method{__contains__} magic method for providing a
478custom implementation for \keyword{in}. Additionally, new built-in
479objects written in C can define what \keyword{in} means for them via a
480new slot in the sequence protocol.
481
482Earlier versions of Python used a recursive algorithm for deleting
483objects. Deeply nested data structures could cause the interpreter to
484fill up the C stack and crash; Christian Tismer rewrote the deletion
485logic to fix this problem. On a related note, comparing recursive
486objects recursed infinitely and crashed; Jeremy Hylton rewrote the
487code to no longer crash, producing a useful result instead. For
488example, after this code:
489
490\begin{verbatim}
491a = []
492b = []
493a.append(a)
494b.append(b)
495\end{verbatim}
496
497The comparison \code{a==b} returns true, because the two recursive
498data structures are isomorphic. \footnote{See the thread ``trashcan
499and PR\#7'' in the April 2000 archives of the python-dev mailing list
500for the discussion leading up to this implementation, and some useful
501relevant links.
502%http://www.python.org/pipermail/python-dev/2000-April/004834.html
503}
504
505Work has been done on porting Python to 64-bit Windows on the Itanium
506processor, mostly by Trent Mick of ActiveState. (Confusingly,
507\code{sys.platform} is still \code{'win32'} on Win64 because it seems
508that for ease of porting, MS Visual C++ treats code as 32 bit on Itanium.)
509PythonWin also supports Windows CE; see the Python CE page at
510\url{http://starship.python.net/crew/mhammond/ce/} for more
511information.
512
513An attempt has been made to alleviate one of Python's warts, the
514often-confusing \exception{NameError} exception when code refers to a
515local variable before the variable has been assigned a value. For
516example, the following code raises an exception on the \keyword{print}
517statement in both 1.5.2 and 2.0; in 1.5.2 a \exception{NameError}
518exception is raised, while 2.0 raises a new
519\exception{UnboundLocalError} exception.
520\exception{UnboundLocalError} is a subclass of \exception{NameError},
521so any existing code that expects \exception{NameError} to be raised
522should still work.
523
524\begin{verbatim}
525def f():
526 print "i=",i
527 i = i + 1
528f()
529\end{verbatim}
530
531\subsection{Changes to Built-in Functions}
532
533A new built-in, \function{zip(\var{seq1}, \var{seq2}, ...)}, has been
534added. \function{zip()} returns a list of tuples where each tuple
535contains the i-th element from each of the argument sequences. The
536difference between \function{zip()} and \code{map(None, \var{seq1},
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000537\var{seq2})} is that \function{map()} pads the sequences with
538\code{None} if the sequences aren't all of the same length, while
539\function{zip()} truncates the returned list to the length of the
540shortest argument sequence.
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000541
542The \function{int()} and \function{long()} functions now accept an
543optional ``base'' parameter when the first argument is a string.
544\code{int('123', 10)} returns 123, while \code{int('123', 16)} returns
545291. \code{int(123, 16)} raises a \exception{TypeError} exception
546with the message ``can't convert non-string with explicit base''.
547
548A new variable holding more detailed version information has been
549added to the \module{sys} module. \code{sys.version_info} is a tuple
550\code{(\var{major}, \var{minor}, \var{micro}, \var{level},
551\var{serial})} For example, in a hypothetical 2.0.1beta1,
552\code{sys.version_info} would be \code{(2, 0, 1, 'beta', 1)}.
553\var{level} is a string such as \code{"alpha"}, \code{"beta"}, or
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000554\code{"final"} for a final release.
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000555
556Dictionaries have an odd new method, \method{setdefault(\var{key},
557\var{default})}, which behaves similarly to the existing
558\method{get()} method. However, if the key is missing,
559\method{setdefault()} both returns the value of \var{default} as
560\method{get()} would do, and also inserts it into the dictionary as
561the value for \var{key}. Thus, the following lines of code:
562
563\begin{verbatim}
564if dict.has_key( key ): return dict[key]
565else:
566 dict[key] = []
567 return dict[key]
568\end{verbatim}
569
570can be reduced to a single \code{return dict.setdefault(key, [])} statement.
571
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +0000572
573% ======================================================================
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000574\section{Porting to 2.0}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000575
576New Python releases try hard to be compatible with previous releases,
577and the record has been pretty good. However, some changes are
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000578considered useful enough, often fixing initial design decisions that
579turned to be actively mistaken, that breaking backward compatibility
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000580can't always be avoided. This section lists the changes in Python 2.0
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000581that may cause old Python code to break.
582
583The change which will probably break the most code is tightening up
584the arguments accepted by some methods. Some methods would take
585multiple arguments and treat them as a tuple, particularly various
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000586list methods such as \method{.append()} and \method{.insert()}.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000587In earlier versions of Python, if \code{L} is a list, \code{L.append(
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00005881,2 )} appends the tuple \code{(1,2)} to the list. In Python 2.0 this
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000589causes a \exception{TypeError} exception to be raised, with the
590message: 'append requires exactly 1 argument; 2 given'. The fix is to
591simply add an extra set of parentheses to pass both values as a tuple:
592\code{L.append( (1,2) )}.
593
594The earlier versions of these methods were more forgiving because they
595used an old function in Python's C interface to parse their arguments;
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00005962.0 modernizes them to use \function{PyArg_ParseTuple}, the current
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000597argument parsing function, which provides more helpful error messages
598and treats multi-argument calls as errors. If you absolutely must use
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00005992.0 but can't fix your code, you can edit \file{Objects/listobject.c}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000600and define the preprocessor symbol \code{NO_STRICT_LIST_APPEND} to
601preserve the old behaviour; this isn't recommended.
602
603Some of the functions in the \module{socket} module are still
604forgiving in this way. For example, \function{socket.connect(
605('hostname', 25) )} is the correct form, passing a tuple representing
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000606an IP address, but \function{socket.connect( 'hostname', 25 )} also
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000607works. \function{socket.connect_ex()} and \function{socket.bind()} are
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000608similarly easy-going. 2.0alpha1 tightened these functions up, but
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000609because the documentation actually used the erroneous multiple
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000610argument form, many people wrote code which would break with the
611stricter checking. GvR backed out the changes in the face of public
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000612reaction, so for the \module{socket} module, the documentation was
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000613fixed and the multiple argument form is simply marked as deprecated;
614it \emph{will} be tightened up again in a future Python version.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000615
616Some work has been done to make integers and long integers a bit more
617interchangeable. In 1.5.2, large-file support was added for Solaris,
618to allow reading files larger than 2Gb; this made the \method{tell()}
619method of file objects return a long integer instead of a regular
620integer. Some code would subtract two file offsets and attempt to use
621the result to multiply a sequence or slice a string, but this raised a
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000622\exception{TypeError}. In 2.0, long integers can be used to multiply
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000623or slice a sequence, and it'll behave as you'd intuitively expect it
624to; \code{3L * 'abc'} produces 'abcabcabc', and \code{
625(0,1,2,3)[2L:4L]} produces (2,3). Long integers can also be used in
626various new places where previously only integers were accepted, such
627as in the \method{seek()} method of file objects.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000628
629The subtlest long integer change of all is that the \function{str()}
630of a long integer no longer has a trailing 'L' character, though
631\function{repr()} still includes it. The 'L' annoyed many people who
632wanted to print long integers that looked just like regular integers,
633since they had to go out of their way to chop off the character. This
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000634is no longer a problem in 2.0, but code which does \code{str(longval)[:-1]} and assumes the 'L' is there, will now lose
635the final digit.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000636
637Taking the \function{repr()} of a float now uses a different
638formatting precision than \function{str()}. \function{repr()} uses
Andrew M. Kuchling662d76e2000-06-25 14:32:48 +0000639\code{\%.17g} format string for C's \function{sprintf()}, while
640\function{str()} uses \code{\%.12g} as before. The effect is that
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000641\function{repr()} may occasionally show more decimal places than
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000642\function{str()}, for certain numbers.
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000643For example, the number 8.1 can't be represented exactly in binary, so
644\code{repr(8.1)} is \code{'8.0999999999999996'}, while str(8.1) is
645\code{'8.1'}.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000646
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000647The \code{-X} command-line option, which turned all standard
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +0000648exceptions into strings instead of classes, has been removed; the
649standard exceptions will now always be classes. The
650\module{exceptions} module containing the standard exceptions was
651translated from Python to a built-in C module, written by Barry Warsaw
652and Fredrik Lundh.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000653
Andrew M. Kuchling791b3662000-07-01 15:04:18 +0000654% Commented out for now -- I don't think anyone will care.
655%The pattern and match objects provided by SRE are C types, not Python
656%class instances as in 1.5. This means you can no longer inherit from
657%\class{RegexObject} or \class{MatchObject}, but that shouldn't be much
658%of a problem since no one should have been doing that in the first
659%place.
660
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000661% ======================================================================
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000662\section{Extending/Embedding Changes}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000663
664Some of the changes are under the covers, and will only be apparent to
Andrew M. Kuchling8357c4c2000-07-01 00:14:43 +0000665people writing C extension modules or embedding a Python interpreter
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000666in a larger application. If you aren't dealing with Python's C API,
Andrew M. Kuchling5b8311e2000-05-31 03:28:42 +0000667you can safely skip this section.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000668
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000669The version number of the Python C API was incremented, so C
670extensions compiled for 1.5.2 must be recompiled in order to work with
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00006712.0. On Windows, attempting to import a third party extension built
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000672for Python 1.5.x usually results in an immediate crash; there's not
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +0000673much we can do about this. (Here's Mark Hammond's explanation of the
674reasons for the crash. The 1.5 module is linked against
675\file{Python15.dll}. When \file{Python.exe} , linked against
676\file{Python16.dll}, starts up, it initializes the Python data
677structures in \file{Python16.dll}. When Python then imports the
678module \file{foo.pyd} linked against \file{Python15.dll}, it
679immediately tries to call the functions in that DLL. As Python has
680not been initialized in that DLL, the program immediately crashes.)
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000681
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000682Users of Jim Fulton's ExtensionClass module will be pleased to find
683out that hooks have been added so that ExtensionClasses are now
684supported by \function{isinstance()} and \function{issubclass()}.
685This means you no longer have to remember to write code such as
686\code{if type(obj) == myExtensionClass}, but can use the more natural
687\code{if isinstance(obj, myExtensionClass)}.
688
Andrew M. Kuchlingb853ea02000-06-03 03:06:58 +0000689The \file{Python/importdl.c} file, which was a mass of \#ifdefs to
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000690support dynamic loading on many different platforms, was cleaned up
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000691and reorganised by Greg Stein. \file{importdl.c} is now quite small,
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000692and platform-specific code has been moved into a bunch of
Andrew M. Kuchlingb9fb1f22000-08-04 12:40:35 +0000693\file{Python/dynload_*.c} files. Another cleanup: there were also a
694number of \file{my*.h} files in the Include/ directory that held
695various portability hacks; they've been merged into a single file,
696\file{Include/pyport.h}.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000697
698Vladimir Marangozov's long-awaited malloc restructuring was completed,
699to make it easy to have the Python interpreter use a custom allocator
700instead of C's standard \function{malloc()}. For documentation, read
Andrew M. Kuchling2d2dc9f2000-08-17 00:27:06 +0000701the comments in \file{Include/pymem.h} and
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000702\file{Include/objimpl.h}. For the lengthy discussions during which
703the interface was hammered out, see the Web archives of the 'patches'
704and 'python-dev' lists at python.org.
705
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000706Recent versions of the GUSI development environment for MacOS support
707POSIX threads. Therefore, Python's POSIX threading support now works
708on the Macintosh. Threading support using the user-space GNU \texttt{pth}
709library was also contributed.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000710
711Threading support on Windows was enhanced, too. Windows supports
712thread locks that use kernel objects only in case of contention; in
713the common case when there's no contention, they use simpler functions
714which are an order of magnitude faster. A threaded version of Python
Andrew M. Kuchling730067e2000-06-30 01:44:05 +00007151.5.2 on NT is twice as slow as an unthreaded version; with the 2.0
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000716changes, the difference is only 10\%. These improvements were
717contributed by Yakov Markovitch.
718
Andrew M. Kuchling08d87c62000-07-09 15:05:15 +0000719Python 2.0's source now uses only ANSI C prototypes, so compiling Python now
720requires an ANSI C compiler, and can no longer be done using a compiler that
721only supports K\&R C.
722
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000723% ======================================================================
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000724\section{Distutils: Making Modules Easy to Install}
725
726Before Python 2.0, installing modules was a tedious affair -- there
727was no way to figure out automatically where Python is installed, or
728what compiler options to use for extension modules. Software authors
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000729had to go through an arduous ritual of editing Makefiles and
Andrew M. Kuchling43737642000-08-30 00:51:02 +0000730configuration files, which only really work on Unix and leave Windows
731and MacOS unsupported. Software users faced wildly differing
732installation instructions
733
734The SIG for distribution utilities, shepherded by Greg Ward, has
735created the Distutils, a system to make package installation much
736easier. They form the \module{distutils} package, a new part of
737Python's standard library. In the best case, installing a Python
738module from source will require the same steps: first you simply mean
739unpack the tarball or zip archive, and the run ``\code{python setup.py
740install}''. The platform will be automatically detected, the compiler
741will be recognized, C extension modules will be compiled, and the
742distribution installed into the proper directory. Optional
743command-line arguments provide more control over the installation
744process, the distutils package offers many places to override defaults
745-- separating the build from the install, building or installing in
746non-default directories, and more.
747
748In order to use the Distutils, you need to write a \file{setup.py}
749script. For the simple case, when the software contains only .py
750files, a minimal \file{setup.py} can be just a few lines long:
751
752\begin{verbatim}
753from distutils.core import setup
754setup (name = "foo", version = "1.0",
755 py_modules = ["module1", "module2"])
756\end{verbatim}
757
758The \file{setup.py} file isn't much more complicated if the software
759consists of a few packages:
760
761\begin{verbatim}
762from distutils.core import setup
763setup (name = "foo", version = "1.0",
764 packages = ["package", "package.subpackage"])
765\end{verbatim}
766
767A C extension can be the most complicated case; here's an example taken from
768the PyXML package:
769
770
771\begin{verbatim}
772from distutils.core import setup, Extension
773
774expat_extension = Extension('xml.parsers.pyexpat',
775 define_macros = [('XML_NS', None)],
776 include_dirs = [ 'extensions/expat/xmltok',
777 'extensions/expat/xmlparse' ],
778 sources = [ 'extensions/pyexpat.c',
779 'extensions/expat/xmltok/xmltok.c',
780 'extensions/expat/xmltok/xmlrole.c',
781 ]
782 )
783setup (name = "PyXML", version = "0.5.4",
784 ext_modules =[ expat_extension ] )
785
786\end{verbatim}
787
788The Distutils can also take care of creating source and binary
789distributions. The ``sdist'' command, run by ``\code{python setup.py
790sdist}', builds a source distribution such as \file{foo-1.0.tar.gz}.
791Adding new commands isn't difficult, ``bdist_rpm'' and
792``bdist_wininst'' commands have already been contributed to create an
793RPM distribution and a Windows installer for the software,
794respectively. Commands to create other distribution formats such as
795Debian packages and Solaris \file{.pkg} files are in various stages of
796development.
797
798All this is documented in a new manual, \textit{Distributing Python
799Modules}, that joins the basic set of Python documentation.
800
801% ======================================================================
802%\section{New XML Code}
803
804%XXX write this section...
805
806% ======================================================================
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000807\section{Module changes}
808
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000809Lots of improvements and bugfixes were made to Python's extensive
810standard library; some of the affected modules include
811\module{readline}, \module{ConfigParser}, \module{cgi},
812\module{calendar}, \module{posix}, \module{readline}, \module{xmllib},
813\module{aifc}, \module{chunk, wave}, \module{random}, \module{shelve},
814and \module{nntplib}. Consult the CVS logs for the exact
815patch-by-patch details.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000816
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000817Brian Gallew contributed OpenSSL support for the \module{socket}
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000818module. OpenSSL is an implementation of the Secure Socket Layer,
819which encrypts the data being sent over a socket. When compiling
820Python, you can edit \file{Modules/Setup} to include SSL support,
821which adds an additional function to the \module{socket} module:
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000822\function{socket.ssl(\var{socket}, \var{keyfile}, \var{certfile})},
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000823which takes a socket object and returns an SSL socket. The
824\module{httplib} and \module{urllib} modules were also changed to
825support ``https://'' URLs, though no one has implemented FTP or SMTP
826over SSL.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000827
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000828The \module{httplib} module has been rewritten by Greg Stein to
829support HTTP/1.1. Backward compatibility with the 1.5 version of
830\module{httplib} is provided, though using HTTP/1.1 features such as
831pipelining will require rewriting code to use a different set of
832interfaces.
833
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000834The \module{Tkinter} module now supports Tcl/Tk version 8.1, 8.2, or
8358.3, and support for the older 7.x versions has been dropped. The
Andrew M. Kuchling791b3662000-07-01 15:04:18 +0000836Tkinter module now supports displaying Unicode strings in Tk widgets.
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000837Also, Fredrik Lundh contributed an optimization which makes operations
838like \code{create_line} and \code{create_polygon} much faster,
Andrew M. Kuchling791b3662000-07-01 15:04:18 +0000839especially when using lots of coordinates.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000840
Andrew M. Kuchlingfa33a4e2000-06-03 02:52:40 +0000841The \module{curses} module has been greatly extended, starting from
842Oliver Andrich's enhanced version, to provide many additional
843functions from ncurses and SYSV curses, such as colour, alternative
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000844character set support, pads, and mouse support. This means the module
845is no longer compatible with operating systems that only have BSD
846curses, but there don't seem to be any currently maintained OSes that
847fall into this category.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000848
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000849As mentioned in the earlier discussion of 2.0's Unicode support, the
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000850underlying implementation of the regular expressions provided by the
851\module{re} module has been changed. SRE, a new regular expression
852engine written by Fredrik Lundh and partially funded by Hewlett
853Packard, supports matching against both 8-bit strings and Unicode
854strings.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000855
856% ======================================================================
857\section{New modules}
858
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000859A number of new modules were added. We'll simply list them with brief
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000860descriptions; consult the 2.0 documentation for the details of a
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000861particular module.
862
863\begin{itemize}
864
Andrew M. Kuchling62cdd962000-06-30 12:46:41 +0000865\item{\module{atexit}}:
866For registering functions to be called before the Python interpreter exits.
867Code that currently sets
868\code{sys.exitfunc} directly should be changed to
869use the \module{atexit} module instead, importing \module{atexit}
870and calling \function{atexit.register()} with
871the function to be called on exit.
872(Contributed by Skip Montanaro.)
873
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000874\item{\module{codecs}, \module{encodings}, \module{unicodedata}:} Added as part of the new Unicode support.
875
Andrew M. Kuchlingfed4f1e2000-07-01 12:33:43 +0000876\item{\module{filecmp}:} Supersedes the old \module{cmp}, \module{cmpcache} and
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000877\module{dircmp} modules, which have now become deprecated.
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +0000878(Contributed by Gordon MacMillan and Moshe Zadka.)
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000879
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +0000880\item{\module{linuxaudiodev}:} Support for the \file{/dev/audio}
881device on Linux, a twin to the existing \module{sunaudiodev} module.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000882(Contributed by Peter Bosch.)
883
884\item{\module{mmap}:} An interface to memory-mapped files on both
885Windows and Unix. A file's contents can be mapped directly into
886memory, at which point it behaves like a mutable string, so its
887contents can be read and modified. They can even be passed to
888functions that expect ordinary strings, such as the \module{re}
889module. (Contributed by Sam Rushing, with some extensions by
890A.M. Kuchling.)
891
Andrew M. Kuchling35e8afb2000-07-08 12:06:31 +0000892\item{\module{pyexpat}:} An interface to the Expat XML parser.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000893(Contributed by Paul Prescod.)
894
895\item{\module{robotparser}:} Parse a \file{robots.txt} file, which is
896used for writing Web spiders that politely avoid certain areas of a
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000897Web site. The parser accepts the contents of a \file{robots.txt} file,
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000898builds a set of rules from it, and can then answer questions about
899the fetchability of a given URL. (Contributed by Skip Montanaro.)
900
901\item{\module{tabnanny}:} A module/script to
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000902check Python source code for ambiguous indentation.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000903(Contributed by Tim Peters.)
904
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000905\item{\module{UserString}:} A base class useful for deriving objects that behave like strings.
906
Andrew M. Kuchling08d87c62000-07-09 15:05:15 +0000907\item{\module{webbrowser}:} A module that provides a platform independent
908way to launch a web browser on a specific URL. For each platform, various
909browsers are tried in a specific order. The user can alter which browser
910is launched by setting the \var{BROWSER} environment variable.
911(Originally inspired by Eric S. Raymond's patch to \module{urllib}
912which added similar functionality, but
913the final module comes from code originally
914implemented by Fred Drake as \file{Tools/idle/BrowserControl.py},
915and adapted for the standard library by Fred.)
916
Andrew M. Kuchlingd500e442000-09-06 12:30:25 +0000917\item{\module{_winreg}:} An interface to the
Andrew M. Kuchlingfed4f1e2000-07-01 12:33:43 +0000918Windows registry. \module{_winreg} is an adaptation of functions that
919have been part of PythonWin since 1995, but has now been added to the core
Andrew M. Kuchlingd500e442000-09-06 12:30:25 +0000920distribution, and enhanced to support Unicode.
921\module{_winreg} was written by Bill Tutt and Mark Hammond.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000922
923\item{\module{zipfile}:} A module for reading and writing ZIP-format
924archives. These are archives produced by \program{PKZIP} on
925DOS/Windows or \program{zip} on Unix, not to be confused with
926\program{gzip}-format files (which are supported by the \module{gzip}
927module)
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000928(Contributed by James C. Ahlstrom.)
929
Andrew M. Kuchling69db0e42000-06-28 02:16:00 +0000930\item{\module{imputil}:} A module that provides a simpler way for
931writing customised import hooks, in comparison to the existing
932\module{ihooks} module. (Implemented by Greg Stein, with much
933discussion on python-dev along the way.)
934
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000935\end{itemize}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000936
937% ======================================================================
938\section{IDLE Improvements}
939
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +0000940IDLE is the official Python cross-platform IDE, written using Tkinter.
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000941Python 2.0 includes IDLE 0.6, which adds a number of new features and
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +0000942improvements. A partial list:
943
944\begin{itemize}
945\item UI improvements and optimizations,
946especially in the area of syntax highlighting and auto-indentation.
947
948\item The class browser now shows more information, such as the top
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000949level functions in a module.
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +0000950
951\item Tab width is now a user settable option. When opening an existing Python
952file, IDLE automatically detects the indentation conventions, and adapts.
953
954\item There is now support for calling browsers on various platforms,
955used to open the Python documentation in a browser.
956
957\item IDLE now has a command line, which is largely similar to
958the vanilla Python interpreter.
959
960\item Call tips were added in many places.
961
962\item IDLE can now be installed as a package.
963
964\item In the editor window, there is now a line/column bar at the bottom.
965
966\item Three new keystroke commands: Check module (Alt-F5), Import
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000967module (F5) and Run script (Ctrl-F5).
Andrew M. Kuchlingc0328f02000-06-10 15:11:20 +0000968
969\end{itemize}
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000970
971% ======================================================================
972\section{Deleted and Deprecated Modules}
973
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000974A few modules have been dropped because they're obsolete, or because
975there are now better ways to do the same thing. The \module{stdwin}
976module is gone; it was for a platform-independent windowing toolkit
977that's no longer developed.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000978
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000979A number of modules have been moved to the
980\file{lib-old} subdirectory:
981\module{cmp}, \module{cmpcache}, \module{dircmp}, \module{dump},
982\module{find}, \module{grep}, \module{packmail},
983\module{poly}, \module{util}, \module{whatsound}, \module{zmod}.
984If you have code which relies on a module that's been moved to
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000985\file{lib-old}, you can simply add that directory to \code{sys.path}
Andrew M. Kuchlinga5bbb002000-06-10 02:41:46 +0000986to get them back, but you're encouraged to update any code that uses
987these modules.
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000988
Andrew M. Kuchling730067e2000-06-30 01:44:05 +0000989\section{Acknowledgements}
Andrew M. Kuchling6c3cd8d2000-06-10 02:24:31 +0000990
Andrew M. Kuchlinga6161ed2000-07-01 00:23:02 +0000991The authors would like to thank the following people for offering
Andrew M. Kuchling5e08a012000-09-04 17:59:27 +0000992suggestions on drafts of this article: Mark Hammond, Fredrik Lundh,
993Detlef Lannert, Skip Montanaro, Vladimir Marangozov, Guido van Rossum,
994and Neil Schemenauer.
Andrew M. Kuchling25bfd0e2000-05-27 11:28:26 +0000995
996\end{document}