Changes copied from the FrameMaker version. Not too much.

This commit is contained in:
Guido van Rossum 1998-07-24 18:51:11 +00:00
parent 56c2013d15
commit 5399d68c4b
1 changed files with 108 additions and 104 deletions

View File

@ -11,8 +11,8 @@ traditional control flow constructs. \keyword{try} specifies exception
handlers and/or cleanup code for a group of statements. Function and handlers and/or cleanup code for a group of statements. Function and
class definitions are also syntactically compound statements. class definitions are also syntactically compound statements.
Compound statements consist of one or more `clauses'. A clause Compound statements consist of one or more `clauses.' A clause
consists of a header and a `suite'. The clause headers of a consists of a header and a `suite.' The clause headers of a
particular compound statement are all at the same indentation level. particular compound statement are all at the same indentation level.
Each clause header begins with a uniquely identifying keyword and ends Each clause header begins with a uniquely identifying keyword and ends
with a colon. A suite is a group of statements controlled by a with a colon. A suite is a group of statements controlled by a
@ -48,15 +48,13 @@ statement: stmt_list NEWLINE | compound_stmt
stmt_list: simple_stmt (";" simple_stmt)* [";"] stmt_list: simple_stmt (";" simple_stmt)* [";"]
\end{verbatim} \end{verbatim}
Note that statements always end in a \code{NEWLINE} possibly followed Note that statements always end in a
by a \code{DEDENT}. \code{NEWLINE}\index{NEWLINE token} possibly followed by a
\index{NEWLINE token} \code{DEDENT}.\index{DEDENT token} Also note that optional
\index{DEDENT token} continuation clauses always begin with a keyword that cannot start a
statement, thus there are no ambiguities (the `dangling
Also note that optional continuation clauses always begin with a \keyword{else}' problem is solved in Python by requiring nested
keyword that cannot start a statement, thus there are no ambiguities \keyword{if} statements to be indented).
(the `dangling \keyword{else}' problem is solved in Python by requiring
nested \keyword{if} statements to be indented).
\indexii{dangling}{else} \indexii{dangling}{else}
The formatting of the grammar rules in the following sections places The formatting of the grammar rules in the following sections places
@ -68,16 +66,16 @@ each clause on a separate line for clarity.
The \keyword{if} statement is used for conditional execution: The \keyword{if} statement is used for conditional execution:
\begin{verbatim} \begin{verbatim}
if_stmt: "if" condition ":" suite if_stmt: "if" expression ":" suite
("elif" condition ":" suite)* ("elif" expression ":" suite)*
["else" ":" suite] ["else" ":" suite]
\end{verbatim} \end{verbatim}
It selects exactly one of the suites by evaluating the conditions one It selects exactly one of the suites by evaluating the expressions one
by one until one is found to be true (see section \ref{Booleans} for by one until one is found to be true (see section \ref{Booleans} for
the definition of true and false); then that suite is executed (and no the definition of true and false); then that suite is executed (and no
other part of the \keyword{if} statement is executed or evaluated). If other part of the \keyword{if} statement is executed or evaluated). If
all conditions are false, the suite of the \keyword{else} clause, if all expressions are false, the suite of the \keyword{else} clause, if
present, is executed. present, is executed.
\kwindex{elif} \kwindex{elif}
\kwindex{else} \kwindex{else}
@ -86,16 +84,16 @@ present, is executed.
\stindex{while} \stindex{while}
\indexii{loop}{statement} \indexii{loop}{statement}
The \keyword{while} statement is used for repeated execution as long as a The \keyword{while} statement is used for repeated execution as long
condition is true: as an expression is true:
\begin{verbatim} \begin{verbatim}
while_stmt: "while" condition ":" suite while_stmt: "while" expression ":" suite
["else" ":" suite] ["else" ":" suite]
\end{verbatim} \end{verbatim}
This repeatedly tests the condition and, if it is true, executes the This repeatedly tests the expression and, if it is true, executes the
first suite; if the condition is false (which may be the first time it first suite; if the expression is false (which may be the first time it
is tested) the suite of the \keyword{else} clause, if present, is is tested) the suite of the \keyword{else} clause, if present, is
executed and the loop terminates. executed and the loop terminates.
\kwindex{else} \kwindex{else}
@ -103,7 +101,7 @@ executed and the loop terminates.
A \keyword{break} statement executed in the first suite terminates the A \keyword{break} statement executed in the first suite terminates the
loop without executing the \keyword{else} clause's suite. A loop without executing the \keyword{else} clause's suite. A
\keyword{continue} statement executed in the first suite skips the rest \keyword{continue} statement executed in the first suite skips the rest
of the suite and goes back to testing the condition. of the suite and goes back to testing the expression.
\stindex{break} \stindex{break}
\stindex{continue} \stindex{continue}
@ -116,11 +114,11 @@ sequence (string, tuple or list):
\obindex{sequence} \obindex{sequence}
\begin{verbatim} \begin{verbatim}
for_stmt: "for" target_list "in" condition_list ":" suite for_stmt: "for" target_list "in" expression_list ":" suite
["else" ":" suite] ["else" ":" suite]
\end{verbatim} \end{verbatim}
The condition list is evaluated once; it should yield a sequence. The The expression list is evaluated once; it should yield a sequence. The
suite is then executed once for each item in the sequence, in the suite is then executed once for each item in the sequence, in the
order of ascending indices. Each item in turn is assigned to the order of ascending indices. Each item in turn is assigned to the
target list using the standard rules for assignments, and then the target list using the standard rules for assignments, and then the
@ -144,12 +142,10 @@ not affect the next item assigned to it.
The target list is not deleted when the loop is finished, but if the The target list is not deleted when the loop is finished, but if the
sequence is empty, it will not have been assigned to at all by the sequence is empty, it will not have been assigned to at all by the
loop. loop. Hint: the built-in function \function{range()} returns a
sequence of integers suitable to emulate the effect of Pascal's
Hint: the built-in function \function{range()} returns a sequence of
integers suitable to emulate the effect of Pascal's
\code{for i := a to b do}; \code{for i := a to b do};
e.g. \code{range(3)} returns the list \code{[0, 1, 2]}. e.g., \code{range(3)} returns the list \code{[0, 1, 2]}.
\bifuncindex{range} \bifuncindex{range}
\indexii{Pascal}{language} \indexii{Pascal}{language}
@ -164,7 +160,7 @@ the current item which has already been treated). Likewise, if the
suite inserts an item in the sequence before the current item, the suite inserts an item in the sequence before the current item, the
current item will be treated again the next time through the loop. current item will be treated again the next time through the loop.
This can lead to nasty bugs that can be avoided by making a temporary This can lead to nasty bugs that can be avoided by making a temporary
copy using a slice of the whole sequence, e.g. copy using a slice of the whole sequence, e.g.,
\index{loop!over mutable sequence} \index{loop!over mutable sequence}
\index{mutable sequence!loop over} \index{mutable sequence!loop over}
@ -182,7 +178,7 @@ code for a group of statements:
\begin{verbatim} \begin{verbatim}
try_stmt: try_exc_stmt | try_fin_stmt try_stmt: try_exc_stmt | try_fin_stmt
try_exc_stmt: "try" ":" suite try_exc_stmt: "try" ":" suite
("except" [condition ["," target]] ":" suite)+ ("except" [expression ["," target]] ":" suite)+
["else" ":" suite] ["else" ":" suite]
try_fin_stmt: "try" ":" suite try_fin_stmt: "try" ":" suite
"finally" ":" suite "finally" ":" suite
@ -190,17 +186,18 @@ try_fin_stmt: "try" ":" suite
There are two forms of \keyword{try} statement: There are two forms of \keyword{try} statement:
\keyword{try}...\keyword{except} and \keyword{try}...\keyword{except} and
\keyword{try}...\keyword{finally}. These forms cannot be mixed. \keyword{try}...\keyword{finally}. These forms cannot be mixed (but
they can be nested in each other).
The \keyword{try}...\keyword{except} form specifies one or more The \keyword{try}...\keyword{except} form specifies one or more
exception handlers exception handlers
(the \keyword{except} clauses). When no exception occurs in the (the \keyword{except} clauses). When no exception occurs in the
\keyword{try} clause, no exception handler is executed. When an \keyword{try} clause, no exception handler is executed. When an
exception occurs in the \keyword{try} suite, a search for an exception exception occurs in the \keyword{try} suite, a search for an exception
handler is started. This inspects the except clauses in turn until handler is started. This search inspects the except clauses in turn until
one is found that matches the exception. A condition-less except one is found that matches the exception. An expression-less except
clause, if present, must be last; it matches any exception. For an clause, if present, must be last; it matches any exception. For an
except clause with a condition, that condition is evaluated, and the except clause with an expression, that expression is evaluated, and the
clause matches the exception if the resulting object is ``compatible'' clause matches the exception if the resulting object is ``compatible''
with the exception. An object is compatible with an exception if it with the exception. An object is compatible with an exception if it
is either the object that identifies the exception, or (for exceptions is either the object that identifies the exception, or (for exceptions
@ -213,7 +210,7 @@ object, not just an object with the same value.
If no except clause matches the exception, the search for an exception If no except clause matches the exception, the search for an exception
handler continues in the surrounding code and on the invocation stack. handler continues in the surrounding code and on the invocation stack.
If the evaluation of a condition in the header of an except clause If the evaluation of an expression in the header of an except clause
raises an exception, the original search for a handler is cancelled raises an exception, the original search for a handler is cancelled
and a search starts for the new exception in the surrounding code and and a search starts for the new exception in the surrounding code and
on the call stack (it is treated as if the entire \keyword{try} statement on the call stack (it is treated as if the entire \keyword{try} statement
@ -234,6 +231,13 @@ exception are assigned to three variables in the \module{sys} module:
\code{sys.exc_traceback} receives a traceback object (see section \code{sys.exc_traceback} receives a traceback object (see section
\ref{traceback}) identifying the point in the program where the \ref{traceback}) identifying the point in the program where the
exception occurred. exception occurred.
These details are also available through the \function{sys.exc_info()}
function, which returns a tuple \code{(exc_type,} \code{exc_value,}
\code{exc_traceback)}. Use of the corresponding variables is
deprecated in favor of this function, since their use is unsafe in a
threaded program. As of Python 1.5, the variables are restored to
their previous values (before the call) when returning from a function
that handled an exception.
\refbimodindex{sys} \refbimodindex{sys}
\ttindex{exc_type} \ttindex{exc_type}
\ttindex{exc_value} \ttindex{exc_value}
@ -252,12 +256,14 @@ The \keyword{try}...\keyword{finally} form specifies a `cleanup' handler. The
\keyword{finally} clause is executed, and then the saved exception is \keyword{finally} clause is executed, and then the saved exception is
re-raised. If the \keyword{finally} clause raises another exception or re-raised. If the \keyword{finally} clause raises another exception or
executes a \keyword{return}, \keyword{break} or \keyword{continue} statement, executes a \keyword{return}, \keyword{break} or \keyword{continue} statement,
the saved exception is lost. the saved exception is lost. The exception information is not
available to the program during execution of the \keyword{finally}
clause.
\kwindex{finally} \kwindex{finally}
When a \keyword{return} or \keyword{break} statement is executed in the When a \keyword{return} or \keyword{break} statement is executed in the
\keyword{try} suite of a \keyword{try}...\keyword{finally} statement, the \keyword{try} suite of a \keyword{try}...\keyword{finally} statement, the
\keyword{finally} clause is also executed `on the way out'. A \keyword{finally} clause is also executed `on the way out.' A
\keyword{continue} statement is illegal in the \keyword{try} clause. (The \keyword{continue} statement is illegal in the \keyword{try} clause. (The
reason is a problem with the current implementation --- this reason is a problem with the current implementation --- this
restriction may be lifted in the future). restriction may be lifted in the future).
@ -269,9 +275,7 @@ restriction may be lifted in the future).
\indexii{function}{definition} \indexii{function}{definition}
A function definition defines a user-defined function object (see A function definition defines a user-defined function object (see
section \ref{types}):\footnote{The new syntax to receive arbitrary section \ref{types}):
keyword arguments is not yet documented in this manual. See chapter
12 of the Tutorial.}
\obindex{user-defined function} \obindex{user-defined function}
\obindex{function} \obindex{function}
@ -280,90 +284,81 @@ funcdef: "def" funcname "(" [parameter_list] ")" ":" suite
parameter_list: (defparameter ",")* ("*" identifier [, "**" identifier] parameter_list: (defparameter ",")* ("*" identifier [, "**" identifier]
| "**" identifier | "**" identifier
| defparameter [","]) | defparameter [","])
defparameter: parameter ["=" condition] defparameter: parameter ["=" expression]
sublist: parameter ("," parameter)* [","] sublist: parameter ("," parameter)* [","]
parameter: identifier | "(" sublist ")" parameter: identifier | "(" sublist ")"
funcname: identifier funcname: identifier
\end{verbatim} \end{verbatim}
A function definition is an executable statement. Its execution binds A function definition is an executable statement. Its execution binds
the function name in the current local name space to a function object the function name in the current local namespace to a function object
(a wrapper around the executable code for the function). This (a wrapper around the executable code for the function). This
function object contains a reference to the current global name space function object contains a reference to the current global namespace
as the global name space to be used when the function is called. as the global namespace to be used when the function is called.
\indexii{function}{name} \indexii{function}{name}
\indexii{name}{binding} \indexii{name}{binding}
The function definition does not execute the function body; this gets The function definition does not execute the function body; this gets
executed only when the function is called. executed only when the function is called.
When one or more top-level parameters have the form \var{parameter \code{=} When one or more top-level parameters have the form \var{parameter}
condition}, the function is said to have ``default parameter values''. \code{=} \var{expression}, the function is said to have ``default
Default parameter values are evaluated when the function definition is parameter values.'' \strong{Default parameter values are evaluated
executed. For a parameter with a default value, the correponding when the function definition is executed.} For a parameter with a
argument may be omitted from a call, in which case the parameter's default value, the corresponding argument may be omitted from a call,
default value is substituted. If a parameter has a default value, all in which case the parameter's default value is substituted. If a
following parameters must also have a default value --- this is a parameter has a default value, all following parameters must also have
syntactic restriction that is not expressed by the grammar.% a default value --- this is a syntactic restriction that is not
expressed by the grammar.%
\footnote{Currently this is not checked; instead, \footnote{Currently this is not checked; instead,
\code{def f(a=1, b)} is interpreted as \code{def f(a=1, b=None)}.} \code{def f(a=1, b)} is interpreted as \code{def f(a=1, b=None)}.}
\indexiii{default}{parameter}{value} \indexiii{default}{parameter}{value}
Function call semantics are described in section \ref{calls}. When a Function call semantics are described in more detail in section
user-defined function is called, first missing arguments for which a \ref{calls}.
default value exists are supplied; then the arguments (a.k.a. actual A function call always assigns values to all parameters mentioned in
parameters) are bound to the (formal) parameters, as follows: the parameter list, either from position arguments, from keyword
\indexii{function}{call} arguments, or from default values. If the form ``\code{*identifier}''
\indexiii{user-defined}{function}{call} is present, it is initialized to a tuple receiving any excess
\index{parameter} positional parameters, defaulting to the empty tuple. If the form
\index{argument} ``\code{**identifier}'' is present, it is initialized to a new
\indexii{parameter}{formal} dictionary receiving any excess keyword arguments, defaulting to a
\indexii{parameter}{actual} new empty dictionary.
\begin{itemize}
\item
If there are no formal parameters, there must be no arguments.
\item
If the formal parameter list does not end in a star followed by an
identifier, there must be exactly as many arguments as there are
parameters in the formal parameter list (at the top level); the
arguments are assigned to the formal parameters one by one. Note that
the presence or absence of a trailing comma at the top level in either
the formal or the actual parameter list makes no difference. The
assignment to a formal parameter is performed as if the parameter
occurs on the left hand side of an assignment statement whose right
hand side's value is that of the argument.
\item
If the formal parameter list ends in a star followed by an identifier,
preceded by zero or more comma-followed parameters, there must be at
least as many arguments as there are parameters preceding the star.
Call this number \var{N}. The first \var{N} arguments are assigned to
the corresponding formal parameters in the way descibed above. A
tuple containing the remaining arguments, if any, is then assigned to
the identifier following the star. This variable will always be a
tuple: if there are no extra arguments, its value is \code{()}, if
there is just one extra argument, it is a singleton tuple.
\indexii{variable length}{parameter list}
\end{itemize}
Note that the `variable length parameter list' feature only works at
the top level of the parameter list; individual parameters use a model
corresponding more closely to that of ordinary assignment. While the
latter model is generally preferable, because of the greater type
safety it offers (wrong-sized tuples aren't silently mistreated),
variable length parameter lists are a sufficiently accepted practice
in most programming languages that a compromise has been worked out.
(And anyway, assignment has no equivalent for empty argument lists.)
It is also possible to create anonymous functions (functions not bound It is also possible to create anonymous functions (functions not bound
to a name), for immediate use in expressions. This uses lambda forms, to a name), for immediate use in expressions. This uses lambda forms,
described in section \ref{lambda}. described in section \ref{lambda}. Note that the lambda form is
merely a shorthand for a simplified function definition; a function
defined in a ``\keyword{def}'' statement can be passed around or
assigned to another name just like a function defined by a lambda
form. The ``\keyword{def}'' form is actually more powerful since it
allows the execution of multiple statements.
\indexii{lambda}{form} \indexii{lambda}{form}
\strong{Programmer's note:} a ``\code{def}'' form executed inside a
function definition defines a local function that can be returned or
passed around. Because of Python's two-scope philosophy, a local
function defined in this way does not have access to the local
variables of the function that contains its definition; the same rule
applies to functions defined by a lambda form. A standard trick to
pass selected local variables into a locally defined function is to
use default argument values, like this:
\begin{verbatim}
# Return a function that returns its argument incremented by 'n'
def make_incrementer(n):
def increment(x, n=n):
return x+n
return increment
add1 = make_incrementer(1)
print add1(3) # This prints '4'
\end{verbatim}
\section{Class definitions} \label{class} \section{Class definitions} \label{class}
\indexii{class}{definition} \indexii{class}{definition}
@ -372,7 +367,7 @@ A class definition defines a class object (see section \ref{types}):
\begin{verbatim} \begin{verbatim}
classdef: "class" classname [inheritance] ":" suite classdef: "class" classname [inheritance] ":" suite
inheritance: "(" [condition_list] ")" inheritance: "(" [expression_list] ")"
classname: identifier classname: identifier
\end{verbatim} \end{verbatim}
@ -380,14 +375,23 @@ A class definition is an executable statement. It first evaluates the
inheritance list, if present. Each item in the inheritance list inheritance list, if present. Each item in the inheritance list
should evaluate to a class object. The class's suite is then executed should evaluate to a class object. The class's suite is then executed
in a new execution frame (see section \ref{execframes}), using a newly in a new execution frame (see section \ref{execframes}), using a newly
created local name space and the original global name space. created local namespace and the original global namespace.
(Usually, the suite contains only function definitions.) When the (Usually, the suite contains only function definitions.) When the
class's suite finishes execution, its execution frame is discarded but class's suite finishes execution, its execution frame is discarded but
its local name space is saved. A class object is then created using its local namespace is saved. A class object is then created using
the inheritance list for the base classes and the saved local name the inheritance list for the base classes and the saved local
space for the attribute dictionary. The class name is bound to this namespace for the attribute dictionary. The class name is bound to this
class object in the original local name space. class object in the original local namespace.
\index{inheritance} \index{inheritance}
\indexii{class}{name} \indexii{class}{name}
\indexii{name}{binding} \indexii{name}{binding}
\indexii{execution}{frame} \indexii{execution}{frame}
\strong{Programmer's note:} variables defined in the class definition
are class variables; they are shared by all instances. To define
instance variables, they must be given a value in the the
\method{__init__()} method or in another method. Both class and
instance variables are accessible through the notation
```code{self.name}'', and an instance variable hides a class variable
with the same name when accessed in this way. Class variables with
immutable values can be used as defaults for instance variables.