blob: 33db0e8140beb4d54841f20960d7969e86aead1c [file] [log] [blame]
Fred Drake2db76802004-12-01 05:05:47 +00001\documentclass{howto}
2\usepackage{distutils}
3% $Id$
4
Fred Drake2db76802004-12-01 05:05:47 +00005
6\title{What's New in Python 2.5}
7\release{0.0}
Andrew M. Kuchling92e24952004-12-03 13:54:09 +00008\author{A.M. Kuchling}
9\authoraddress{\email{amk@amk.ca}}
Fred Drake2db76802004-12-01 05:05:47 +000010
11\begin{document}
12\maketitle
13\tableofcontents
14
15This article explains the new features in Python 2.5. No release date
Andrew M. Kuchling92e24952004-12-03 13:54:09 +000016for Python 2.5 has been set; it will probably be released in late 2005.
Fred Drake2db76802004-12-01 05:05:47 +000017
18% Compare with previous release in 2 - 3 sentences here.
19
20This article doesn't attempt to provide a complete specification of
21the new features, but instead provides a convenient overview. For
22full details, you should refer to the documentation for Python 2.5.
23% add hyperlink when the documentation becomes available online.
24If you want to understand the complete implementation and design
25rationale, refer to the PEP for a particular new feature.
26
27
28%======================================================================
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +000029\section{PEP 309: Partial Function Application}
Fred Drake2db76802004-12-01 05:05:47 +000030
Andrew M. Kuchlingb1c96fd2005-03-20 21:42:04 +000031The \module{functional} module is intended to contain tools for
32functional-style programming. Currently it only contains
33\class{partial}, but new functions will probably be added in future
34versions of Python.
35
Andrew M. Kuchling4b000cd2005-04-09 15:51:44 +000036For programs written in a functional style, it can be useful to
37construct variants of existing functions that have some of the
38parameters filled in. Consider a Python function \code{f(a, b, c)};
39you could create a new function \code{g(b, c)} that was equivalent to
40\code{f(1, b, c)}. This is called ``partial function application'',
41and is provided by the \class{partial} class in the new
42\module{functional} module.
43
44The constructor for \class{partial} takes the arguments
45\code{(\var{function}, \var{arg1}, \var{arg2}, ...
46\var{kwarg1}=\var{value1}, \var{kwarg2}=\var{value2})}. The resulting
47object is callable, so you can just call it to invoke \var{function}
48with the filled-in arguments.
49
50Here's a small but realistic example:
51
52\begin{verbatim}
53import functional
54
55def log (message, subsystem):
56 "Write the contents of 'message' to the specified subsystem."
57 print '%s: %s' % (subsystem, message)
58 ...
59
60server_log = functional.partial(log, subsystem='server')
61\end{verbatim}
62
63Here's another example, from a program that uses PyGTk.
64
Andrew M. Kuchlingb1c96fd2005-03-20 21:42:04 +000065% XXX add example from my GTk programming
66
67
68\begin{seealso}
69
70\seepep{309}{Partial Function Application}{PEP proposed and written by
71Peter Harris; implemented by Hye-Shik Chang, with adaptations by
72Raymond Hettinger.}
73
74\end{seealso}
Fred Drake2db76802004-12-01 05:05:47 +000075
76
77%======================================================================
Fred Drakedb7b0022005-03-20 22:19:47 +000078\section{PEP 314: Metadata for Python Software Packages v1.1}
79
Andrew M. Kuchlingd8d732e2005-04-09 23:59:41 +000080Some simple dependency support was added to Distutils. The
81\function{setup()} function now has \code{requires},\code{provides},
82and \code{obsoletes}. When you build a source distribution using the
83\code{sdist} command, the dependency information will be recorded in
84the \file{PKG-INFO} file.
85
86Another new keyword is \code{download_url}, which should be set to a
87URL for the package's source code. This means it's now possible to
88look up an entry in the package index, determine the dependencies for
89a package, and download the required packages.
90
91% XXX put example here
92
93\begin{seealso}
94
95\seepep{314}{Metadata for Python Software Packages v1.1}{PEP proposed
96and written by A.M. Kuchling, Richard Jones, and Fred Drake;
97implemented by Richard Jones and Fred Drake.}
98
99\end{seealso}
Fred Drakedb7b0022005-03-20 22:19:47 +0000100
101
102%======================================================================
Fred Drake2db76802004-12-01 05:05:47 +0000103\section{Other Language Changes}
104
105Here are all of the changes that Python 2.5 makes to the core Python
106language.
107
108\begin{itemize}
Andrew M. Kuchling1cae3f52004-12-03 14:57:21 +0000109
110\item The \function{min()} and \function{max()} built-in functions
111gained a \code{key} keyword argument analogous to the \code{key}
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000112argument for \method{sort()}. This argument supplies a function
Andrew M. Kuchling1cae3f52004-12-03 14:57:21 +0000113that takes a single argument and is called for every value in the list;
114\function{min()}/\function{max()} will return the element with the
115smallest/largest return value from this function.
116For example, to find the longest string in a list, you can do:
117
118\begin{verbatim}
119L = ['medium', 'longest', 'short']
120# Prints 'longest'
121print max(L, key=len)
122# Prints 'short', because lexicographically 'short' has the largest value
123print max(L)
124\end{verbatim}
125
126(Contributed by Steven Bethard and Raymond Hettinger.)
Fred Drake2db76802004-12-01 05:05:47 +0000127
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000128\item The list of base classes in a class definition can now be empty.
129As an example, this is now legal:
130
131\begin{verbatim}
132class C():
133 pass
134\end{verbatim}
135(Implemented by Brett Cannon.)
136
Fred Drake2db76802004-12-01 05:05:47 +0000137\end{itemize}
138
139
140%======================================================================
141\subsection{Optimizations}
142
143\begin{itemize}
144
145\item Optimizations should be described here.
146
147\end{itemize}
148
149The net result of the 2.5 optimizations is that Python 2.5 runs the
Andrew M. Kuchling92e24952004-12-03 13:54:09 +0000150pystone benchmark around XX\% faster than Python 2.4.
Fred Drake2db76802004-12-01 05:05:47 +0000151
152
153%======================================================================
154\section{New, Improved, and Deprecated Modules}
155
156As usual, Python's standard library received a number of enhancements and
157bug fixes. Here's a partial list of the most notable changes, sorted
158alphabetically by module name. Consult the
159\file{Misc/NEWS} file in the source tree for a more
160complete list of changes, or look through the CVS logs for all the
161details.
162
163\begin{itemize}
164
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000165% the cPickle module no longer accepts the deprecated None option in the
166% args tuple returned by __reduce__().
167
168% csv module improvements
169
170% datetime.datetime() now has a strptime class method which can be used to
171% create datetime object using a string and format.
172
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000173\item The \function{nsmallest()} and
174\function{nlargest()} functions in the \module{heapq} module
175now support a \code{key} keyword argument similar to the one
176provided by the \function{min()}/\function{max()} functions
177and the \method{sort()} methods. For example:
178Example:
179
180\begin{verbatim}
181>>> import heapq
182>>> L = ["short", 'medium', 'longest', 'longer still']
183>>> heapq.nsmallest(2, L) # Return two lowest elements, lexicographically
184['longer still', 'longest']
185>>> heapq.nsmallest(2, L, key=len) # Return two shortest elements
186['short', 'medium']
187\end{verbatim}
188
189(Contributed by Raymond Hettinger.)
190
Andrew M. Kuchling511a3a82005-03-20 19:52:18 +0000191\item The \function{itertools.islice()} function now accepts
192\code{None} for the start and step arguments. This makes it more
193compatible with the attributes of slice objects, so that you can now write
194the following:
195
196\begin{verbatim}
197s = slice(5) # Create slice object
198itertools.islice(iterable, s.start, s.stop, s.step)
199\end{verbatim}
200
201(Contributed by Raymond Hettinger.)
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000202
203\item New module: \module{spwd} provides functions for accessing the
204shadow password database on systems that support it.
205% XXX give example
206
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000207\item The \module{os} module underwent a number of changes. The
208\member{stat_float_times} variable now defaults to true, meaning that
209\function{os.stat()} will now return time values as floats. (This
210doesn't necessarily mean that \function{os.stat()} will return times
211that are precise to fractions of a second; not all systems support
212such precision.)
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000213
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000214Also, constants named \member{os.SEEK_SET}, \member{os.SEEK_CUR}, and
215\member{os.SEEK_END} have been added; these are the parameters to the
216\function{os.lseek()} function.
Fred Drake2db76802004-12-01 05:05:47 +0000217
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000218\item The \class{TarFile} class in the \module{tarfile} module now has
Georg Brandl08c02db2005-07-22 18:39:19 +0000219an \method{extractall()} method that extracts all members from the
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000220archive into the current working directory. It's also possible to set
221a different directory as the extraction target, and to unpack only a
222subset of the archive's members. (Contributed by Lars Gust\"abel.)
223
Fred Drake114b8ca2005-03-21 05:47:11 +0000224\end{itemize}
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000225
Fred Drake2db76802004-12-01 05:05:47 +0000226
227
228%======================================================================
229% whole new modules get described in \subsections here
230
231
232% ======================================================================
233\section{Build and C API Changes}
234
235Changes to Python's build process and to the C API include:
236
237\begin{itemize}
238
Andrew M. Kuchling2238fc62004-12-03 15:16:40 +0000239\item The \cfunction{PyRange_New()} function was removed. It was never documented,
240never used in the core code, and had dangerously lax error checking.
Fred Drake2db76802004-12-01 05:05:47 +0000241
242\end{itemize}
243
244
245%======================================================================
246\subsection{Port-Specific Changes}
247
248Platform-specific changes go here.
249
250
251%======================================================================
252\section{Other Changes and Fixes \label{section-other}}
253
254As usual, there were a bunch of other improvements and bugfixes
255scattered throughout the source tree. A search through the CVS change
256logs finds there were XXX patches applied and YYY bugs fixed between
Andrew M. Kuchling92e24952004-12-03 13:54:09 +0000257Python 2.4 and 2.5. Both figures are likely to be underestimates.
Fred Drake2db76802004-12-01 05:05:47 +0000258
259Some of the more notable changes are:
260
261\begin{itemize}
262
263\item Details go here.
264
265\end{itemize}
266
267
268%======================================================================
269\section{Porting to Python 2.5}
270
271This section lists previously described changes that may require
272changes to your code:
273
274\begin{itemize}
275
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000276\item Some old deprecated modules (\module{statcache}, \module{tzparse},
277 \module{whrandom}) have been moved to \file{Lib/lib-old}.
Andrew M. Kuchling0c35db92005-03-20 20:06:49 +0000278You can get access to these modules again by adding the directory
279to your \code{sys.path}:
280
281\begin{verbatim}
282import os
283from distutils import sysconfig
284
285lib_dir = sysconfig.get_python_lib(standard_lib=True)
286old_dir = os.path.join(lib_dir, 'lib-old')
287sys.path.append(old_dir)
288\end{verbatim}
289
290Doing so is discouraged, however; it's better to update any code that
291still uses these modules.
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000292
293% the pickle module no longer uses the deprecated bin parameter.
Fred Drake2db76802004-12-01 05:05:47 +0000294
295\end{itemize}
296
297
298%======================================================================
299\section{Acknowledgements \label{acks}}
300
301The author would like to thank the following people for offering
302suggestions, corrections and assistance with various drafts of this
303article: .
304
305\end{document}