From: Fred Drake Date: Tue, 5 Jun 2001 02:17:02 +0000 (+0000) Subject: Update a "Programmer's note" about lambda forms and scoping to reflect X-Git-Tag: v2.2a3~1617 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=88382696f48244e8dbb30cfcf1882b57cb019fc0;p=thirdparty%2FPython%2Fcpython.git Update a "Programmer's note" about lambda forms and scoping to reflect the availability of nested scoping in Python 2.1 and 2.2. --- diff --git a/Doc/ref/ref5.tex b/Doc/ref/ref5.tex index 9590ee422159..d66996a7e900 100644 --- a/Doc/ref/ref5.tex +++ b/Doc/ref/ref5.tex @@ -869,17 +869,31 @@ that functions created with lambda forms cannot contain statements. \indexii{lambda}{form} \indexii{anonmymous}{function} -\strong{Programmer's note:} a lambda form defined inside a function -has no access to names defined in the function's namespace. This is -because Python has only two scopes: local and global. A common -work-around is to use default argument values to pass selected -variables into the lambda's namespace, e.g.: +\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}} \indexii{expression}{list}