Write datetime.strptime() item; show use of @contextmanager in defining __context__ methods; minor edits; add two names

This commit is contained in:
Andrew M. Kuchling 2006-04-19 12:55:39 +00:00
parent a9017c39ce
commit 6719131129
1 changed files with 48 additions and 18 deletions

View File

@ -145,7 +145,7 @@ around your conditional expressions, you won't run into this case.
\begin{seealso}
\seepep{308}{Conditional Expressions}{PEP written by
Guido van Rossum and Raymond D. Hettinger; implemented by Thomas
Guido van~Rossum and Raymond D. Hettinger; implemented by Thomas
Wouters.}
\end{seealso}
@ -549,7 +549,7 @@ chance to run. The syntactic restriction that you couldn't mix
therefore been removed. This seems like a minor bit of language
trivia, but using generators and \code{try...finally} is actually
necessary in order to implement the \keyword{with} statement
described by PEP 343. We'll look at this new statement in the following
described by PEP 343. I'll look at this new statement in the following
section.
Another even more esoteric effect of this change: previously, the
@ -560,7 +560,7 @@ once the generator has been exhausted.
\begin{seealso}
\seepep{342}{Coroutines via Enhanced Generators}{PEP written by
Guido van Rossum and Phillip J. Eby;
Guido van~Rossum and Phillip J. Eby;
implemented by Phillip J. Eby. Includes examples of
some fancier uses of generators as coroutines.}
@ -581,10 +581,10 @@ The \keyword{with} statement allows a clearer version of code that
uses \code{try...finally} blocks to ensure that clean-up code is
executed.
First, I'll discuss the statement as it will commonly be used, and
then a subsection will examine the implementation details and how to
write objects (called ``context managers'') that can be used with this
statement.
In this section, I'll discuss the statement as it will commonly be
used. In the next section, I'll examine the implementation details
and show how to write objects called ``context managers'' and
``contexts'' for use with this statement.
The \keyword{with} statement is a new control-flow structure whose
basic structure is:
@ -830,10 +830,29 @@ with db_transaction(db) as cursor:
...
\end{verbatim}
You can also use this decorator to write the \method{__context__()} method
for a class without creating a new class for the context:
\begin{verbatim}
class DatabaseConnection:
@contextmanager
def __context__ (self):
cursor = self.cursor()
try:
yield cursor
except:
self.rollback()
raise
else:
self.commit()
\end{verbatim}
There's a \function{nested(\var{mgr1}, \var{mgr2}, ...)} manager that
combines a number of context managers so you don't need to write
nested \keyword{with} statements. This example
both uses a database transaction and also acquires a thread lock:
nested \keyword{with} statements. This example statement does two
things, starting a database transaction and acquiring a thread lock:
\begin{verbatim}
lock = threading.Lock()
@ -853,8 +872,8 @@ with closing(open('/tmp/file', 'r')) as f:
\begin{seealso}
\seepep{343}{The ``with'' statement}{PEP written by Guido van Rossum
and Nick Coghlan; implemented by Mike Bland, Guido van Rossum, and
\seepep{343}{The ``with'' statement}{PEP written by Guido van~Rossum
and Nick Coghlan; implemented by Mike Bland, Guido van~Rossum, and
Neal Norwitz. The PEP shows the code generated for a \keyword{with}
statement, which can be helpful in learning how context managers
work.}
@ -926,7 +945,7 @@ in a few releases.
\begin{seealso}
\seepep{352}{Required Superclass for Exceptions}{PEP written by
Brett Cannon and Guido van Rossum; implemented by Brett Cannon.}
Brett Cannon and Guido van~Rossum; implemented by Brett Cannon.}
\end{seealso}
@ -1174,9 +1193,6 @@ the SVN logs for all the details.
% the cPickle module no longer accepts the deprecated None option in the
% args tuple returned by __reduce__().
% XXX datetime.datetime() now has a strptime class method which can be used to
% create datetime object using a string and format.
% XXX fileinput: opening hook used to control how files are opened.
% .input() now has a mode parameter
% now has a fileno() function
@ -1250,6 +1266,19 @@ read from the source; records can span multiple physical lines, so
\member{line_num} is not the same as the number of records read.
(Contributed by Skip Montanaro and Andrew McNamara.)
\item The \class{datetime} class in the \module{datetime}
module now has a \method{strptime(\var{string}, \var{format})}
method for parsing date strings, contributed by Josh Spoerri.
It uses the same format characters as \function{time.strptime()} and
\function{time.strftime()}:
\begin{verbatim}
from datetime import datetime
ts = datetime.strptime('10:13:15 2006-03-07',
'%H:%M:%S %Y-%m-%d')
\end{verbatim}
\item In the \module{gc} module, the new \function{get_count()} function
returns a 3-tuple containing the current collection counts for the
three GC generations. This is accounting information for the garbage
@ -1943,6 +1972,7 @@ freed with the corresponding family's \cfunction{*_Free()} function.
The author would like to thank the following people for offering
suggestions, corrections and assistance with various drafts of this
article: Martin von~L\"owis, Mike Rovner, Thomas Wouters.
article: Phillip J. Eby, Kent Johnson, Martin von~L\"owis, Mike
Rovner, Thomas Wouters.
\end{document}