blob: ff64af0c534ab95a6771a4091df8324d38c038e8 [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. Kuchling5eefdca2006-02-08 11:36:09 +000016for Python 2.5 has been set; it will probably be released in the
17autumn of 2006.
Fred Drake2db76802004-12-01 05:05:47 +000018
Andrew M. Kuchling437567c2006-03-07 20:48:55 +000019% XXX Compare with previous release in 2 - 3 sentences here.
Fred Drake2db76802004-12-01 05:05:47 +000020
21This article doesn't attempt to provide a complete specification of
22the new features, but instead provides a convenient overview. For
23full details, you should refer to the documentation for Python 2.5.
Andrew M. Kuchling437567c2006-03-07 20:48:55 +000024% XXX add hyperlink when the documentation becomes available online.
Fred Drake2db76802004-12-01 05:05:47 +000025If you want to understand the complete implementation and design
26rationale, refer to the PEP for a particular new feature.
27
28
29%======================================================================
Andrew M. Kuchling437567c2006-03-07 20:48:55 +000030\section{PEP 308: Conditional Expressions}
31
Andrew M. Kuchlinge362d932006-03-09 13:56:25 +000032For a long time, people have been requesting a way to write
33conditional expressions, expressions that return value A or value B
34depending on whether a Boolean value is true or false. A conditional
35expression lets you write a single assignment statement that has the
36same effect as the following:
37
38\begin{verbatim}
39if condition:
40 x = true_value
41else:
42 x = false_value
43\end{verbatim}
44
45There have been endless tedious discussions of syntax on both
46python-dev and comp.lang.python, and even a vote that found the
47majority of voters wanted some way to write conditional expressions,
48but there was no syntax that was clearly preferred by a majority.
49Candidates include C's \code{cond ? true_v : false_v},
50\code{if cond then true_v else false_v}, and 16 other variations.
51
52GvR eventually chose a surprising syntax:
53
54\begin{verbatim}
55x = true_value if condition else false_value
56\end{verbatim}
57
58Evaluation is still lazy as in existing Boolean expression, so the
59evaluation jumps around a bit. The \var{condition} expression is
60evaluated first, and the \var{true_value} expression is evaluated only
61if the condition was true. Similarly, the \var{false_value}
62expression is only evaluated when the condition is false.
63
64This syntax may seem strange and backwards; why does the condition go
65in the \emph{middle} of the expression, and not in the front as in C's
66\code{c ? x : y}? The decision was checked by applying the new syntax
67to the modules in the standard library and seeing how the resulting
68code read. In many cases where a conditional expression is used, one
69value seems to be the 'common case' and one value is an 'exceptional
70case', used only on rarer occasions when the condition isn't met. The
71conditional syntax makes this pattern a bit more obvious:
72
73\begin{verbatim}
74contents = ((doc + '\n') if doc else '')
75\end{verbatim}
76
77I read the above statement as meaning ``here \var{contents} is
Andrew M. Kuchlingd0fcc022006-03-09 13:57:28 +000078usually assigned a value of \code{doc+'\e n'}; sometimes
Andrew M. Kuchlinge362d932006-03-09 13:56:25 +000079\var{doc} is empty, in which special case an empty string is returned.''
80I doubt I will use conditional expressions very often where there
81isn't a clear common and uncommon case.
82
83There was some discussion of whether the language should require
84surrounding conditional expressions with parentheses. The decision
85was made to \emph{not} require parentheses in the Python language's
86grammar, but as a matter of style I think you should always use them.
87Consider these two statements:
88
89\begin{verbatim}
90# First version -- no parens
91level = 1 if logging else 0
92
93# Second version -- with parens
94level = (1 if logging else 0)
95\end{verbatim}
96
97In the first version, I think a reader's eye might group the statement
98into 'level = 1', 'if logging', 'else 0', and think that the condition
99decides whether the assignment to \var{level} is performed. The
100second version reads better, in my opinion, because it makes it clear
101that the assignment is always performed and the choice is being made
102between two values.
103
104Another reason for including the brackets: a few odd combinations of
105list comprehensions and lambdas could look like incorrect conditional
106expressions. See \pep{308} for some examples. If you put parentheses
107around your conditional expressions, you won't run into this case.
108
109
110\begin{seealso}
111
112\seepep{308}{Conditional Expressions}{PEP written by
113Guido van Rossum and Raymond D. Hettinger; implemented by Thomas
114Wouters.}
115
116\end{seealso}
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000117
118
119%======================================================================
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000120\section{PEP 309: Partial Function Application}
Fred Drake2db76802004-12-01 05:05:47 +0000121
Andrew M. Kuchlingb1c96fd2005-03-20 21:42:04 +0000122The \module{functional} module is intended to contain tools for
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000123functional-style programming. Currently it only contains a
124\class{partial()} function, but new functions will probably be added
125in future versions of Python.
Andrew M. Kuchlingb1c96fd2005-03-20 21:42:04 +0000126
Andrew M. Kuchling4b000cd2005-04-09 15:51:44 +0000127For programs written in a functional style, it can be useful to
128construct variants of existing functions that have some of the
129parameters filled in. Consider a Python function \code{f(a, b, c)};
130you could create a new function \code{g(b, c)} that was equivalent to
131\code{f(1, b, c)}. This is called ``partial function application'',
132and is provided by the \class{partial} class in the new
133\module{functional} module.
134
135The constructor for \class{partial} takes the arguments
136\code{(\var{function}, \var{arg1}, \var{arg2}, ...
137\var{kwarg1}=\var{value1}, \var{kwarg2}=\var{value2})}. The resulting
138object is callable, so you can just call it to invoke \var{function}
139with the filled-in arguments.
140
141Here's a small but realistic example:
142
143\begin{verbatim}
144import functional
145
146def log (message, subsystem):
147 "Write the contents of 'message' to the specified subsystem."
148 print '%s: %s' % (subsystem, message)
149 ...
150
151server_log = functional.partial(log, subsystem='server')
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000152server_log('Unable to open socket')
Andrew M. Kuchling4b000cd2005-04-09 15:51:44 +0000153\end{verbatim}
154
Andrew M. Kuchling6af7fe02005-08-02 17:20:36 +0000155Here's another example, from a program that uses PyGTk. Here a
156context-sensitive pop-up menu is being constructed dynamically. The
157callback provided for the menu option is a partially applied version
158of the \method{open_item()} method, where the first argument has been
159provided.
Andrew M. Kuchling4b000cd2005-04-09 15:51:44 +0000160
Andrew M. Kuchling6af7fe02005-08-02 17:20:36 +0000161\begin{verbatim}
162...
163class Application:
164 def open_item(self, path):
165 ...
166 def init (self):
167 open_func = functional.partial(self.open_item, item_path)
168 popup_menu.append( ("Open", open_func, 1) )
169\end{verbatim}
Andrew M. Kuchlingb1c96fd2005-03-20 21:42:04 +0000170
171
172\begin{seealso}
173
174\seepep{309}{Partial Function Application}{PEP proposed and written by
175Peter Harris; implemented by Hye-Shik Chang, with adaptations by
176Raymond Hettinger.}
177
178\end{seealso}
Fred Drake2db76802004-12-01 05:05:47 +0000179
180
181%======================================================================
Fred Drakedb7b0022005-03-20 22:19:47 +0000182\section{PEP 314: Metadata for Python Software Packages v1.1}
183
Andrew M. Kuchlingd8d732e2005-04-09 23:59:41 +0000184Some simple dependency support was added to Distutils. The
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000185\function{setup()} function now has \code{requires}, \code{provides},
186and \code{obsoletes} keyword parameters. When you build a source
187distribution using the \code{sdist} command, the dependency
188information will be recorded in the \file{PKG-INFO} file.
Andrew M. Kuchlingd8d732e2005-04-09 23:59:41 +0000189
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000190Another new keyword parameter is \code{download_url}, which should be
191set to a URL for the package's source code. This means it's now
192possible to look up an entry in the package index, determine the
193dependencies for a package, and download the required packages.
Andrew M. Kuchlingd8d732e2005-04-09 23:59:41 +0000194
195% XXX put example here
196
197\begin{seealso}
198
199\seepep{314}{Metadata for Python Software Packages v1.1}{PEP proposed
200and written by A.M. Kuchling, Richard Jones, and Fred Drake;
201implemented by Richard Jones and Fred Drake.}
202
203\end{seealso}
Fred Drakedb7b0022005-03-20 22:19:47 +0000204
205
206%======================================================================
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000207\section{PEP 328: Absolute and Relative Imports}
208
209% XXX write this
210
211
212%======================================================================
213\section{PEP 341: Unified try/except/finally}
214
215% XXX write this
216
217
218%======================================================================
Andrew M. Kuchlinga2e21cb2005-08-02 17:13:21 +0000219\section{PEP 342: New Generator Features}
220
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000221As introduced in Python 2.3, generators only produce output; once a
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000222generator's code is invoked to create an iterator, there's no way to
223pass any new information into the function when its execution is
224resumed. Hackish solutions to this include making the generator's
225code look at a global variable and then changing the global variable's
226value, or passing in some mutable object that callers then modify.
227Python 2.5 adds the ability to pass values \emph{into} a generator.
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000228
229To refresh your memory of basic generators, here's a simple example:
230
231\begin{verbatim}
232def counter (maximum):
233 i = 0
234 while i < maximum:
235 yield i
236 i += 1
237\end{verbatim}
238
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000239When you call \code{counter(10)}, the result is an iterator that
240returns the values from 0 up to 9. On encountering the
241\keyword{yield} statement, the iterator returns the provided value and
242suspends the function's execution, preserving the local variables.
243Execution resumes on the following call to the iterator's
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000244\method{next()} method, picking up after the \keyword{yield} statement.
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000245
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000246In Python 2.3, \keyword{yield} was a statement; it didn't return any
247value. In 2.5, \keyword{yield} is now an expression, returning a
248value that can be assigned to a variable or otherwise operated on:
Andrew M. Kuchlinga2e21cb2005-08-02 17:13:21 +0000249
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000250\begin{verbatim}
251val = (yield i)
252\end{verbatim}
253
254I recommend that you always put parentheses around a \keyword{yield}
255expression when you're doing something with the returned value, as in
256the above example. The parentheses aren't always necessary, but it's
257easier to always add them instead of having to remember when they're
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000258needed.\footnote{The exact rules are that a \keyword{yield}-expression must
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000259always be parenthesized except when it occurs at the top-level
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000260expression on the right-hand side of an assignment, meaning you can
261write \code{val = yield i} but have to use parentheses when there's an
262operation, as in \code{val = (yield i) + 12}.}
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000263
264Values are sent into a generator by calling its
265\method{send(\var{value})} method. The generator's code is then
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000266resumed and the \keyword{yield} expression returns the specified
267\var{value}. If the regular \method{next()} method is called, the
268\keyword{yield} returns \constant{None}.
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000269
270Here's the previous example, modified to allow changing the value of
271the internal counter.
272
273\begin{verbatim}
274def counter (maximum):
275 i = 0
276 while i < maximum:
277 val = (yield i)
278 # If value provided, change counter
279 if val is not None:
280 i = val
281 else:
282 i += 1
283\end{verbatim}
284
285And here's an example of changing the counter:
286
287\begin{verbatim}
288>>> it = counter(10)
289>>> print it.next()
2900
291>>> print it.next()
2921
293>>> print it.send(8)
2948
295>>> print it.next()
2969
297>>> print it.next()
298Traceback (most recent call last):
299 File ``t.py'', line 15, in ?
300 print it.next()
301StopIteration
Andrew M. Kuchlingc2033702005-08-29 13:30:12 +0000302\end{verbatim}
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000303
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000304Because \keyword{yield} will often be returning \constant{None}, you
305should always check for this case. Don't just use its value in
306expressions unless you're sure that the \method{send()} method
307will be the only method used resume your generator function.
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000308
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000309In addition to \method{send()}, there are two other new methods on
310generators:
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000311
312\begin{itemize}
313
314 \item \method{throw(\var{type}, \var{value}=None,
315 \var{traceback}=None)} is used to raise an exception inside the
316 generator; the exception is raised by the \keyword{yield} expression
317 where the generator's execution is paused.
318
319 \item \method{close()} raises a new \exception{GeneratorExit}
320 exception inside the generator to terminate the iteration.
321 On receiving this
322 exception, the generator's code must either raise
323 \exception{GeneratorExit} or \exception{StopIteration}; catching the
324 exception and doing anything else is illegal and will trigger
325 a \exception{RuntimeError}. \method{close()} will also be called by
326 Python's garbage collection when the generator is garbage-collected.
327
328 If you need to run cleanup code in case of a \exception{GeneratorExit},
329 I suggest using a \code{try: ... finally:} suite instead of
330 catching \exception{GeneratorExit}.
331
332\end{itemize}
333
334The cumulative effect of these changes is to turn generators from
335one-way producers of information into both producers and consumers.
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000336
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000337Generators also become \emph{coroutines}, a more generalized form of
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000338subroutines. Subroutines are entered at one point and exited at
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000339another point (the top of the function, and a \keyword{return
340statement}), but coroutines can be entered, exited, and resumed at
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000341many different points (the \keyword{yield} statements).
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000342
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000343
Andrew M. Kuchlinga2e21cb2005-08-02 17:13:21 +0000344\begin{seealso}
345
346\seepep{342}{Coroutines via Enhanced Generators}{PEP written by
347Guido van Rossum and Phillip J. Eby;
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000348implemented by Phillip J. Eby. Includes examples of
349some fancier uses of generators as coroutines.}
350
351\seeurl{http://en.wikipedia.org/wiki/Coroutine}{The Wikipedia entry for
352coroutines.}
353
Neal Norwitz09179882006-03-04 23:31:45 +0000354\seeurl{http://www.sidhe.org/\~{}dan/blog/archives/000178.html}{An
Andrew M. Kuchling07382062005-08-27 18:45:47 +0000355explanation of coroutines from a Perl point of view, written by Dan
356Sugalski.}
Andrew M. Kuchlinga2e21cb2005-08-02 17:13:21 +0000357
358\end{seealso}
359
360
361%======================================================================
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000362\section{PEP 343: The 'with' statement}
363
364% XXX write this
365
366
367%======================================================================
Andrew M. Kuchling8f4d2552006-03-08 01:50:20 +0000368\section{PEP 352: Exceptions as New-Style Classes}
369
Andrew M. Kuchlingaeadf952006-03-09 19:06:05 +0000370Exception classes can now be new-style classes, not just classic classes,
371and the built-in \exception{Exception} class and all
372
373The inheritance hierarchy for exceptions has been rearranged a bit.
374In 2.5, the inheritance relationships are:
375
376\begin{verbatim}
377BaseException # New in Python 2.5
378|- KeyboardInterrupt
379|- SystemExit
380|- Exception
381 |- (all other current built-in exceptions)
382\end{verbatim}
383
384This rearrangement was done because people often want to catch all
385exceptions that indicate program errors. \exception{KeyboardInterrupt} and
386\exception{SystemExit} aren't errors, though, and usually represent an explicit
387action such as the user hitting Control-C or code calling
388\function{sys.exit()}. A bare \code{except:} will catch all exceptions,
389so you commonly need to list \exception{KeyboardInterrupt} and
390\exception{SystemExit} in order to re-raise them. The usual pattern is:
391
392\begin{verbatim}
393try:
394 ...
395except (KeyboardInterrupt, SystemExit):
396 raise
397except:
398 # Log error...
399 # Continue running program...
400\end{verbatim}
401
402In Python 2.5, you can now write \code{except Exception} to achieve
403the same result, catching all the exceptions that usually indicate errors
404but leaving \exception{KeyboardInterrupt} and
405\exception{SystemExit} alone. As in previous versions,
406a bare \code{except:} still catches all exceptions.
407
408The goal for Python 3.0 is to require any class raised as an exception
409to derive from \exception{BaseException} or some descendant of
410\exception{BaseException}, and future releases in the
411Python 2.x series may begin to enforce this constraint. Therefore, I
412suggest you begin making all your exception classes derive from
413\exception{Exception} now. It's been suggested that the bare
414\code{except:} form should be removed in Python 3.0, but Guido van~Rossum
415hasn't decided whether to do this or not.
416
417Raising of strings as exceptions, as in the statement \code{raise
418"Error occurred"}, is deprecated in Python 2.5 and will trigger a
419warning. The aim is to be able to remove the string-exception feature
420in a few releases.
421
422
423\begin{seealso}
424
425\seepep{352}{}{PEP written by
426Brett Cannon and Guido van Rossum; implemented by Brett Cannon.}
427
428\end{seealso}
Andrew M. Kuchling8f4d2552006-03-08 01:50:20 +0000429
430
431%======================================================================
Andrew M. Kuchling437567c2006-03-07 20:48:55 +0000432\section{PEP 357: The '__index__' method}
433
434% XXX write this
435
436
437%======================================================================
Fred Drake2db76802004-12-01 05:05:47 +0000438\section{Other Language Changes}
439
440Here are all of the changes that Python 2.5 makes to the core Python
441language.
442
443\begin{itemize}
Andrew M. Kuchling1cae3f52004-12-03 14:57:21 +0000444
445\item The \function{min()} and \function{max()} built-in functions
446gained a \code{key} keyword argument analogous to the \code{key}
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000447argument for \method{sort()}. This argument supplies a function
Andrew M. Kuchling1cae3f52004-12-03 14:57:21 +0000448that takes a single argument and is called for every value in the list;
449\function{min()}/\function{max()} will return the element with the
450smallest/largest return value from this function.
451For example, to find the longest string in a list, you can do:
452
453\begin{verbatim}
454L = ['medium', 'longest', 'short']
455# Prints 'longest'
456print max(L, key=len)
457# Prints 'short', because lexicographically 'short' has the largest value
458print max(L)
459\end{verbatim}
460
461(Contributed by Steven Bethard and Raymond Hettinger.)
Fred Drake2db76802004-12-01 05:05:47 +0000462
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000463\item Two new built-in functions, \function{any()} and
464\function{all()}, evaluate whether an iterator contains any true or
465false values. \function{any()} returns \constant{True} if any value
466returned by the iterator is true; otherwise it will return
467\constant{False}. \function{all()} returns \constant{True} only if
468all of the values returned by the iterator evaluate as being true.
469
470% XXX who added?
471
472
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000473\item The list of base classes in a class definition can now be empty.
474As an example, this is now legal:
475
476\begin{verbatim}
477class C():
478 pass
479\end{verbatim}
480(Implemented by Brett Cannon.)
481
Fred Drake2db76802004-12-01 05:05:47 +0000482\end{itemize}
483
484
485%======================================================================
486\subsection{Optimizations}
487
488\begin{itemize}
489
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000490\item When they were introduced
491in Python 2.4, the built-in \class{set} and \class{frozenset} types
492were built on top of Python's dictionary type.
493In 2.5 the internal data structure has been customized for implementing sets,
494and as a result sets will use a third less memory and are somewhat faster.
495(Implemented by Raymond Hettinger.)
Fred Drake2db76802004-12-01 05:05:47 +0000496
497\end{itemize}
498
499The net result of the 2.5 optimizations is that Python 2.5 runs the
Andrew M. Kuchling92e24952004-12-03 13:54:09 +0000500pystone benchmark around XX\% faster than Python 2.4.
Fred Drake2db76802004-12-01 05:05:47 +0000501
502
503%======================================================================
504\section{New, Improved, and Deprecated Modules}
505
506As usual, Python's standard library received a number of enhancements and
507bug fixes. Here's a partial list of the most notable changes, sorted
508alphabetically by module name. Consult the
509\file{Misc/NEWS} file in the source tree for a more
Andrew M. Kuchlingf688cc52006-03-10 18:50:08 +0000510complete list of changes, or look through the SVN logs for all the
Fred Drake2db76802004-12-01 05:05:47 +0000511details.
512
513\begin{itemize}
514
Andrew M. Kuchlingaeadf952006-03-09 19:06:05 +0000515% ctypes added
516
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000517% collections.deque now has .remove()
518
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000519% the cPickle module no longer accepts the deprecated None option in the
520% args tuple returned by __reduce__().
521
522% csv module improvements
523
524% datetime.datetime() now has a strptime class method which can be used to
525% create datetime object using a string and format.
526
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000527\item A new \module{hashlib} module has been added to replace the
528\module{md5} and \module{sha} modules. \module{hashlib} adds support
529for additional secure hashes (SHA-224, SHA-256, SHA-384, and SHA-512).
530When available, the module uses OpenSSL for fast platform optimized
531implementations of algorithms. The old \module{md5} and \module{sha}
532modules still exist as wrappers around hashlib to preserve backwards
533compatibility. (Contributed by Gregory P. Smith.)
534
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000535\item The \function{nsmallest()} and
536\function{nlargest()} functions in the \module{heapq} module
537now support a \code{key} keyword argument similar to the one
538provided by the \function{min()}/\function{max()} functions
539and the \method{sort()} methods. For example:
540Example:
541
542\begin{verbatim}
543>>> import heapq
544>>> L = ["short", 'medium', 'longest', 'longer still']
545>>> heapq.nsmallest(2, L) # Return two lowest elements, lexicographically
546['longer still', 'longest']
547>>> heapq.nsmallest(2, L, key=len) # Return two shortest elements
548['short', 'medium']
549\end{verbatim}
550
551(Contributed by Raymond Hettinger.)
552
Andrew M. Kuchling511a3a82005-03-20 19:52:18 +0000553\item The \function{itertools.islice()} function now accepts
554\code{None} for the start and step arguments. This makes it more
555compatible with the attributes of slice objects, so that you can now write
556the following:
557
558\begin{verbatim}
559s = slice(5) # Create slice object
560itertools.islice(iterable, s.start, s.stop, s.step)
561\end{verbatim}
562
563(Contributed by Raymond Hettinger.)
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000564
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000565\item The \module{operator} module's \function{itemgetter()}
566and \function{attrgetter()} functions now support multiple fields.
567A call such as \code{operator.attrgetter('a', 'b')}
568will return a function
569that retrieves the \member{a} and \member{b} attributes. Combining
570this new feature with the \method{sort()} method's \code{key} parameter
571lets you easily sort lists using multiple fields.
572
573% XXX who added?
574
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000575
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000576\item The \module{os} module underwent a number of changes. The
577\member{stat_float_times} variable now defaults to true, meaning that
578\function{os.stat()} will now return time values as floats. (This
579doesn't necessarily mean that \function{os.stat()} will return times
580that are precise to fractions of a second; not all systems support
581such precision.)
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000582
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000583Constants named \member{os.SEEK_SET}, \member{os.SEEK_CUR}, and
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000584\member{os.SEEK_END} have been added; these are the parameters to the
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000585\function{os.lseek()} function. Two new constants for locking are
586\member{os.O_SHLOCK} and \member{os.O_EXLOCK}.
587
588On FreeBSD, the \function{os.stat()} function now returns
589times with nanosecond resolution, and the returned object
590now has \member{st_gen} and \member{st_birthtime}.
591The \member{st_flags} member is also available, if the platform supports it.
592% XXX patch 1180695, 1212117
593
Andrew M. Kuchling4678dc82006-01-15 16:11:28 +0000594\item The \module{socket} module now supports \constant{AF_NETLINK}
595sockets on Linux, thanks to a patch from Philippe Biondi.
596Netlink sockets are a Linux-specific mechanism for communications
597between a user-space process and kernel code; an introductory
598article about them is at \url{http://www.linuxjournal.com/article/7356}.
599In Python code, netlink addresses are represented as a tuple of 2 integers,
600\code{(\var{pid}, \var{group_mask})}.
601
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000602\item New module: \module{spwd} provides functions for accessing the
603shadow password database on systems that support it.
604% XXX give example
Fred Drake2db76802004-12-01 05:05:47 +0000605
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000606\item The \class{TarFile} class in the \module{tarfile} module now has
Georg Brandl08c02db2005-07-22 18:39:19 +0000607an \method{extractall()} method that extracts all members from the
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000608archive into the current working directory. It's also possible to set
609a different directory as the extraction target, and to unpack only a
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000610subset of the archive's members.
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000611
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000612A tarfile's compression can be autodetected by
613using the mode \code{'r|*'}.
614% patch 918101
615(Contributed by Lars Gust\"abel.)
Gregory P. Smithf21a5f72005-08-21 18:45:59 +0000616
Andrew M. Kuchlingf688cc52006-03-10 18:50:08 +0000617\item The \module{unicodedata} module has been updated to use version 4.1.0
618of the Unicode character database. Version 3.2.0 is required
619by some specifications, so it's still available as
620\member{unicodedata.db_3_2_0}.
621
Fredrik Lundh7e0aef02005-12-12 18:54:55 +0000622\item A new package \module{xml.etree} has been added, which contains
623a subset of the ElementTree XML library. Available modules are
624\module{ElementTree}, \module{ElementPath}, and
625\module{ElementInclude}, from ElementTree 1.2.6. (Contributed by
626Fredrik Lundh.)
627
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000628\item The \module{xmlrpclib} module now supports returning
629 \class{datetime} objects for the XML-RPC date type. Supply
630 \code{use_datetime=True} to the \function{loads()} function
631 or the \class{Unmarshaller} class to enable this feature.
632% XXX patch 1120353
633
Gregory P. Smithf21a5f72005-08-21 18:45:59 +0000634
Fred Drake114b8ca2005-03-21 05:47:11 +0000635\end{itemize}
Andrew M. Kuchlinge9b1bf42005-03-20 19:26:30 +0000636
Fred Drake2db76802004-12-01 05:05:47 +0000637
638
639%======================================================================
640% whole new modules get described in \subsections here
641
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000642% XXX new distutils features: upload
643
Fredrik Lundh7e0aef02005-12-12 18:54:55 +0000644% XXX should hashlib perhaps be described here instead?
645% XXX should xml.etree perhaps be described here instead?
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000646
647
Fred Drake2db76802004-12-01 05:05:47 +0000648
649% ======================================================================
650\section{Build and C API Changes}
651
652Changes to Python's build process and to the C API include:
653
654\begin{itemize}
655
Andrew M. Kuchlingdb85ed52005-10-23 21:52:59 +0000656\item The design of the bytecode compiler has changed a great deal, no
657longer generating bytecode by traversing the parse tree. Instead
658the parse tree is converted to an abstract syntax tree (or AST), and it is
659the abstract syntax tree that's traversed to produce the bytecode.
660
661No documentation has been written for the AST code yet. To start
662learning about it, read the definition of the various AST nodes in
663\file{Parser/Python.asdl}. A Python script reads this file and
664generates a set of C structure definitions in
665\file{Include/Python-ast.h}. The \cfunction{PyParser_ASTFromString()}
666and \cfunction{PyParser_ASTFromFile()}, defined in
667\file{Include/pythonrun.h}, take Python source as input and return the
668root of an AST representing the contents. This AST can then be turned
669into a code object by \cfunction{PyAST_Compile()}. For more
670information, read the source code, and then ask questions on
671python-dev.
672
673% List of names taken from Jeremy's python-dev post at
674% http://mail.python.org/pipermail/python-dev/2005-October/057500.html
675The AST code was developed under Jeremy Hylton's management, and
676implemented by (in alphabetical order) Brett Cannon, Nick Coghlan,
677Grant Edwards, John Ehresman, Kurt Kaiser, Neal Norwitz, Tim Peters,
678Armin Rigo, and Neil Schemenauer, plus the participants in a number of
679AST sprints at conferences such as PyCon.
680
Andrew M. Kuchling150e3492005-08-23 00:56:06 +0000681\item The built-in set types now have an official C API. Call
682\cfunction{PySet_New()} and \cfunction{PyFrozenSet_New()} to create a
683new set, \cfunction{PySet_Add()} and \cfunction{PySet_Discard()} to
684add and remove elements, and \cfunction{PySet_Contains} and
685\cfunction{PySet_Size} to examine the set's state.
686
687\item The \cfunction{PyRange_New()} function was removed. It was
688never documented, never used in the core code, and had dangerously lax
689error checking.
Fred Drake2db76802004-12-01 05:05:47 +0000690
691\end{itemize}
692
693
694%======================================================================
695\subsection{Port-Specific Changes}
696
697Platform-specific changes go here.
698
699
700%======================================================================
701\section{Other Changes and Fixes \label{section-other}}
702
703As usual, there were a bunch of other improvements and bugfixes
Andrew M. Kuchlingf688cc52006-03-10 18:50:08 +0000704scattered throughout the source tree. A search through the SVN change
Fred Drake2db76802004-12-01 05:05:47 +0000705logs finds there were XXX patches applied and YYY bugs fixed between
Andrew M. Kuchling92e24952004-12-03 13:54:09 +0000706Python 2.4 and 2.5. Both figures are likely to be underestimates.
Fred Drake2db76802004-12-01 05:05:47 +0000707
708Some of the more notable changes are:
709
710\begin{itemize}
711
712\item Details go here.
713
714\end{itemize}
715
716
717%======================================================================
718\section{Porting to Python 2.5}
719
720This section lists previously described changes that may require
721changes to your code:
722
723\begin{itemize}
724
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000725\item Some old deprecated modules (\module{statcache}, \module{tzparse},
726 \module{whrandom}) have been moved to \file{Lib/lib-old}.
Andrew M. Kuchling0c35db92005-03-20 20:06:49 +0000727You can get access to these modules again by adding the directory
728to your \code{sys.path}:
729
730\begin{verbatim}
731import os
732from distutils import sysconfig
733
734lib_dir = sysconfig.get_python_lib(standard_lib=True)
735old_dir = os.path.join(lib_dir, 'lib-old')
736sys.path.append(old_dir)
737\end{verbatim}
738
739Doing so is discouraged, however; it's better to update any code that
740still uses these modules.
Andrew M. Kuchling3e41b052005-03-01 00:53:46 +0000741
742% the pickle module no longer uses the deprecated bin parameter.
Fred Drake2db76802004-12-01 05:05:47 +0000743
744\end{itemize}
745
746
747%======================================================================
748\section{Acknowledgements \label{acks}}
749
750The author would like to thank the following people for offering
751suggestions, corrections and assistance with various drafts of this
752article: .
753
754\end{document}