Add some items

Expand the "Other Language Changes" section
Rewrite various passages.
This commit is contained in:
Andrew M. Kuchling 2002-07-11 20:09:50 +00:00
parent 7845e7c726
commit e995d16f71
1 changed files with 159 additions and 113 deletions

View File

@ -22,10 +22,6 @@
%
% Optik (or whatever it gets called)
%
% getopt.gnu_getopt
%
% Docstrings now optional (with --without-doc-strings)
%
% New dependency argument to distutils.Extension
%
@ -233,7 +229,7 @@ and implemented by Jack Jansen.}
%======================================================================
\section{PEP 279: The \function{enumerate()} Built-in Function}
\section{PEP 279: The \function{enumerate()} Built-in Function\label{section-enumerate}}
A new built-in function, \function{enumerate()}, will make
certain loops a bit clearer. \code{enumerate(thing)}, where
@ -340,15 +336,21 @@ strings \samp{True} and \samp{False} instead of \samp{1} and \samp{0}.
\end{seealso}
\section{Extended Slices\label{extended-slices}}
Ever since Python 1.4 the slice syntax has supported a third
``stride'' argument, but the built-in sequence types have not
supported this feature (it was initially included at the behest of the
developers of the Numerical Python package). Starting with Python
2.3, the built-in sequence types do support the stride.
\section{Extended Slices\label{section-slices}}
For example, to extract the elements of a list with even indexes:
Ever since Python 1.4, the slicing syntax has supported an optional
third ``step'' or ``stride'' argument. For example, these are all
legal Python syntax: \code{L[1:10:2]}, \code{L[:-1:1]},
\code{L[::-1]}. This was added to Python included at the request of
the developers of Numerical Python. However, the built-in sequence
types of lists, tuples, and strings have never supported this feature,
and you got a \exception{TypeError} if you tried it. Michael Hudson
contributed a patch that was applied to Python 2.3 and fixed this
shortcoming.
For example, you can now easily extract the elements of a list that
have even indexes:
\begin{verbatim}
>>> L = range(10)
@ -356,38 +358,137 @@ For example, to extract the elements of a list with even indexes:
[0, 2, 4, 6, 8]
\end{verbatim}
To make a copy of the same list in reverse order:
Negative values also work, so you can make a copy of the same list in
reverse order:
\begin{verbatim}
>>> L[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
\end{verbatim}
This also works for strings:
\begin{verbatim}
>>> s='abcd'
>>> s[::2]
'ac'
>>> s[::-1]
'dcba'
\end{verbatim}
%======================================================================
\section{Other Language Changes}
%Here are the changes that Python 2.3 makes to the core language.
Here are all of the changes that Python 2.3 makes to the core Python
language.
%\begin{itemize}
%\item The \keyword{yield} statement is now always a keyword, as
%described in section~\ref{section-generators}.
\begin{itemize}
\item The \keyword{yield} statement is now always a keyword, as
described in section~\ref{section-generators} of this document.
%\item Two new constants, \constant{True} and \constant{False} were
%added along with the built-in \class{bool} type, as described in
%section~\ref{section-bool}.
\item A new built-in function \function{enumerate()}
was added, as described in section~\ref{section-enumerate} of this
document.
%\item
%\end{itemize}
\item Two new constants, \constant{True} and \constant{False} were
added along with the built-in \class{bool} type, as described in
section~\ref{section-bool} of this document.
\item Built-in types now support the extended slicing syntax,
as described in section~\ref{section-slices} of this document.
%\begin{PendingDeprecationWarning}
\item Dictionaries have a new method, \method{pop(\var{key})}, that
returns the value corresponding to \var{key} and removes that
key/value pair from the dictionary. \method{pop()} will raise a
\exception{KeyError} if the requested key isn't present in the
dictionary:
\begin{verbatim}
>>> d = {1:2}
>>> d
{1: 2}
>>> d.pop(4)
Traceback (most recent call last):
File ``stdin'', line 1, in ?
KeyError: 4
>>> d.pop(1)
2
>>> d.pop(1)
Traceback (most recent call last):
File ``stdin'', line 1, in ?
KeyError: pop(): dictionary is empty
>>> d
{}
>>>
\end{verbatim}
(Patch contributed by Raymond Hettinger.)
\item The \method{strip()}, \method{lstrip()}, and \method{rstrip()}
string methods now have an optional argument for specifying the
characters to strip. The default is still to remove all whitespace
characters:
\begin{verbatim}
>>> ' abc '.strip()
'abc'
>>> '><><abc<><><>'.strip('<>')
'abc'
>>> '><><abc<><><>\n'.strip('<>')
'abc<><><>\n'
>>> u'\u4000\u4001abc\u4000'.strip(u'\u4000')
u'\u4001abc'
>>>
\end{verbatim}
\item The \method{startswith()} and \method{endswith()}
string methods now accept negative numbers for the start and end
parameters.
\item Another new string method is \method{zfill()}, originally a
function in the \module{string} module. \method{zfill()} pads a
numeric string with zeros on the left until it's the specified width.
Note that the \code{\%} operator is still more flexible and powerful
than \method{zfill()}.
\begin{verbatim}
>>> '45'.zfill(4)
'0045'
>>> '12345'.zfill(4)
'12345'
>>> 'goofy'.zfill(6)
'0goofy'
\end{verbatim}
\item
A new warning, \exception{PendingDeprecationWarning} was added to
provide direction on features which are in the process of being
deprecated. The warning will not be printed by default. To see the
pending deprecations, use
\programopt{-Walways::PendingDeprecationWarning::} on the command line
or use \function{warnings.filterwarnings()}.
%\end{PendingDeprecationWarning}
deprecated. The warning will \emph{not} be printed by default. To
check for use of features that will be deprecated in the future,
supply \programopt{-Walways::PendingDeprecationWarning::} on the
command line or use \function{warnings.filterwarnings()}.
\item One minor but far-reaching change is that the names of extension
types defined by the modules included with Python now contain the
module and a \samp{.} in front of the type name. For example, in
Python 2.2, if you created a socket and printed its
\member{__class__}, you'd get this output:
\begin{verbatim}
>>> s = socket.socket()
>>> s.__class__
<type 'socket'>
\end{verbatim}
In 2.3, you get this:
\begin{verbatim}
>>> s.__class__
<type '_socket.socket'>
\end{verbatim}
\end{itemize}
%======================================================================
@ -457,9 +558,9 @@ support, turn on the Python interpreter's debugging code by running
To aid extension writers, a header file \file{Misc/pymemcompat.h} is
distributed with the source to Python 2.3 that allows Python
extensions to use the 2.3 interfaces to memory allocation and compile
against any version of Python since 1.5.2. (The idea is that you take
the file from Python's source distribution and bundle it with the
source of your extension).
against any version of Python since 1.5.2. You would copy the file
from Python's source distribution and bundle it with the source of
your extension.
\begin{seealso}
@ -471,6 +572,7 @@ SourceForge CVS browser.}
\end{seealso}
%======================================================================
\section{New and Improved Modules}
@ -515,87 +617,6 @@ documentation for details.
% XXX add a link to the module docs?
(Contributed by Greg Ward.)
\item One minor but far-reaching change is that the names of extension
types defined by the modules included with Python now contain the
module and a \samp{.} in front of the type name. For example, in
Python 2.2, if you created a socket and printed its
\member{__class__}, you'd get this output:
\begin{verbatim}
>>> s = socket.socket()
>>> s.__class__
<type 'socket'>
\end{verbatim}
In 2.3, you get this:
\begin{verbatim}
>>> s.__class__
<type '_socket.socket'>
\end{verbatim}
\item The \method{strip()}, \method{lstrip()}, and \method{rstrip()}
string methods now have an optional argument for specifying the
characters to strip. The default is still to remove all whitespace
characters:
\begin{verbatim}
>>> ' abc '.strip()
'abc'
>>> '><><abc<><><>'.strip('<>')
'abc'
>>> '><><abc<><><>\n'.strip('<>')
'abc<><><>\n'
>>> u'\u4000\u4001abc\u4000'.strip(u'\u4000')
u'\u4001abc'
>>>
\end{verbatim}
\item The \method{startswith()} and \method{endswith()}
string methods now have accept negative numbers for
start and end parameters.
\item Another new string method is \method{zfill()}, originally a
function in the \module{string} module. \method{zfill()} pads a
numeric string with zeros on the left until it's the specified width.
Note that the \code{\%} operator is still more flexible and powerful
than \method{zfill()}.
\begin{verbatim}
>>> '45'.zfill(4)
'0045'
>>> '12345'.zfill(4)
'12345'
>>> 'goofy'.zfill(6)
'0goofy'
\end{verbatim}
\item Dictionaries have a new method, \method{pop(\var{key})}, that
returns the value corresponding to \var{key} and removes that
key/value pair from the dictionary. \method{pop()} will raise a
\exception{KeyError} if the requsted key isn't present in the
dictionary:
\begin{verbatim}
>>> d = {1:2}
>>> d
{1: 2}
>>> d.pop(4)
Traceback (most recent call last):
File ``stdin'', line 1, in ?
KeyError: 4
>>> d.pop(1)
2
>>> d.pop(1)
Traceback (most recent call last):
File ``stdin'', line 1, in ?
KeyError: pop(): dictionary is empty
>>> d
{}
>>>
\end{verbatim}
(Contributed by Raymond Hettinger.)
\item Two new functions in the \module{math} module,
\function{degrees(\var{rads})} and \function{radians(\var{degs})},
convert between radians and degrees. Other functions in the
@ -605,7 +626,25 @@ input values measured in radians. (Contributed by Raymond Hettinger.)
\item Three new functions, \function{getpgid()}, \function{killpg()},
and \function{mknod()}, were added to the \module{posix} module that
underlies the \module{os} module.
underlies the \module{os} module. (Contributed by Gustavo Niemeyer
and Geert Jansen.)
\item The \module{getopt} module gained a new function,
\function{gnu_getopt()}, that supports the same arguments as the existing
\function{getopt()} function but uses GNU-style scanning mode.
The existing \function{getopt()} stops processing options as soon as a
non-option argument is encountered, but in GNU-style mode processing
continues, meaning that options and arguments can be mixed. For
example:
\begin{verbatim}
>>> getopt.getopt(['-f', 'filename', 'output', '-v'], 'f:v')
([('-f', 'filename')], ['output', '-v'])
>>> getopt.gnu_getopt(['-f', 'filename', 'output', '-v'], 'f:v')
([('-f', 'filename'), ('-v', '')], ['output'])
\end{verbatim}
(Contributed by Peter \AA{strand}.)
\item Two new binary packagers were added to the Distutils.
\code{bdist_pkgtool} builds \file{.pkg} files to use with Solaris
@ -652,6 +691,13 @@ Changes to Python's build process, and to the C API, include:
when running Python's \file{configure} script. (Contributed by Ondrej
Palkovsky.)
\item The interpreter can be compiled without any docstrings for
the built-in functions and modules by supplying
\longprogramopt{--without-doc-strings} to the \file{configure} script.
This makes the Python executable about 10\% smaller, but will also
mean that you can't get help for Python's built-ins. (Contributed by
Gustavo Niemeyer.)
\item The \cfunction{PyArg_NoArgs()} macro is now deprecated, and code
that uses it should be changed. For Python 2.2 and later, the method
definition table can specify the