Given lambda its own section, instead of burying it in boolean operators.

This commit is contained in:
Jeremy Hylton 2002-04-01 21:05:21 +00:00
parent 53ed917d3a
commit 2225add242
1 changed files with 7 additions and 30 deletions

View File

@ -955,11 +955,16 @@ invent a value anyway, it does not bother to return a value of the
same type as its argument, so e.g., \code{not 'foo'} yields \code{0}, same type as its argument, so e.g., \code{not 'foo'} yields \code{0},
not \code{''}.) not \code{''}.)
\section{Lambdas\label{lambdas}}
\indexii{lambda}{expression}
\indexii{lambda}{form}
\indexii{anonmymous}{function}
Lambda forms (lambda expressions) have the same syntactic position as Lambda forms (lambda expressions) have the same syntactic position as
expressions. They are a shorthand to create anonymous functions; the expressions. They are a shorthand to create anonymous functions; the
expression \code{lambda \var{arguments}: \var{expression}} expression \code{lambda \var{arguments}: \var{expression}}
yields a function object that behaves virtually identical to one yields a function object. The unnamed object behaves like a function
defined with object define with
\begin{verbatim} \begin{verbatim}
def name(arguments): def name(arguments):
@ -969,34 +974,6 @@ def name(arguments):
See section \ref{function} for the syntax of parameter lists. Note See section \ref{function} for the syntax of parameter lists. Note
that functions created with lambda forms cannot contain statements. that functions created with lambda forms cannot contain statements.
\label{lambda} \label{lambda}
\indexii{lambda}{expression}
\indexii{lambda}{form}
\indexii{anonmymous}{function}
\strong{Programmer's note:} Prior to Python 2.1, a lambda form defined
inside a function has no access to names defined in the function's
namespace. This is because Python had only two scopes: local and
global. A common work-around was to use default argument values to
pass selected variables into the lambda's namespace, e.g.:
\begin{verbatim}
def make_incrementor(increment):
return lambda x, n=increment: x+n
\end{verbatim}
As of Python 2.1, nested scopes were introduced, and this work-around
has not been necessary. Python 2.1 supports nested scopes in modules
which include the statement \samp{from __future__ import
nested_scopes}, and more recent versions of Python enable nested
scopes by default. This version works starting with Python 2.1:
\begin{verbatim}
from __future__ import nested_scopes
def make_incrementor(increment):
return lambda x: x+increment
\end{verbatim}
\section{Expression lists\label{exprlists}} \section{Expression lists\label{exprlists}}
\indexii{expression}{list} \indexii{expression}{list}