blob: 9a225132a85536b99d62bc55e1cba87a13e88a45 [file] [log] [blame]
Fred Drake39778b72001-03-23 16:20:46 +00001\chapter{Future statements and nested scopes \label{futures}}
2\sectionauthor{Jeremy Hylton}{jeremy@alum.mit.edu}
3
Jeremy Hylton324cc6e2001-03-23 15:29:54 +00004
5The semantics of Python's static scoping will change in version 2.2 to
6support resolution of unbound local names in enclosing functions'
7namespaces. The new semantics will be available in Python 2.1 through
Fred Drakea9d04502001-03-23 16:47:11 +00008the use of a future statement. This appendix documents these two
Jeremy Hylton324cc6e2001-03-23 15:29:54 +00009features for Python 2.1; it will be removed in Python 2.2 and the
10features will be documented in the main sections of this manual.
11
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000012
Fred Drake39778b72001-03-23 16:20:46 +000013\section{Future statements \label{future-statements}}
14
15A \dfn{future statement}\indexii{future}{statement} is a directive to
16the compiler that a particular module should be compiled using syntax
17or semantics that will be available in a specified future release of
18Python. The future statement is intended to ease migration to future
19versions of Python that introduce incompatible changes to the
20language. It allows use of the new features on a per-module basis
21before the release in which the feature becomes standard.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000022
23\begin{verbatim}
24future_statement: "from" "__future__" "import" feature ["as" name]
25 ("," feature ["as" name])*
26
27feature: identifier
28name: identifier
29\end{verbatim}
30
31A future statement must appear near the top of the module. The only
32lines that can appear before a future statement are:
33
34\begin{itemize}
35
36\item the module docstring (if any),
37\item comments,
38\item blank lines, and
39\item other future statements.
40
41\end{itemize}
42
43The only feature recognized by Python 2.1 is \samp{nested_scopes}.
44
45A future statement is recognized and treated specially at compile time:
46Changes to the semantics of core constructs are often implemented by
47generating different code. It may even be the case that a new feature
48introduces new incompatible syntax (such as a new reserved word), in
49which case the compiler may need to parse the module differently. Such
50decisions cannot be pushed off until runtime.
51
52For any given release, the compiler knows which feature names have been
53defined, and raises a compile-time error if a future statement contains
54a feature not known to it.
55
56The direct runtime semantics are the same as for any import statement:
Fred Drake39778b72001-03-23 16:20:46 +000057there is a standard module \module{__future__}, described later, and
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000058it will be imported in the usual way at the time the future statement
59is executed.
60
61The interesting runtime semantics depend on the specific feature
62enabled by the future statement.
63
64Note that there is nothing special about the statement:
65
66\begin{verbatim}
67import __future__ [as name]
68\end{verbatim}
69
Fred Drake39778b72001-03-23 16:20:46 +000070That is not a future statement; it's an ordinary import statement with
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000071no special semantics or syntax restrictions.
72
73Code compiled by an exec statement or calls to the builtin functions
Fred Drake39778b72001-03-23 16:20:46 +000074\function{compile()} and \function{execfile()} that occur in a module
75\module{M} containing a future statement will use the new syntax or
76semantics associated with the future statement.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000077
78A future statement typed at an interactive interpreter prompt will
79take effect for the rest of the interpreter session. If an
Fred Drake39778b72001-03-23 16:20:46 +000080interpreter is started with the \programopt{-i} option, is passed a
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000081script name to execute, and the script includes a future statement, it
82will be in effect in the interactive session started after the script
83is executed.
84
85\section{\module{__future__} ---
86 Future statement definitions}
87
Fred Drake39778b72001-03-23 16:20:46 +000088\declaremodule[future]{standard}{__future__}
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000089\modulesynopsis{Future statement definitions}
90
Fred Drake39778b72001-03-23 16:20:46 +000091\module{__future__} is a real module, and serves three purposes:
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000092
93\begin{itemize}
94
95\item To avoid confusing existing tools that analyze import statements
96 and expect to find the modules they're importing.
97
98\item To ensure that future_statements run under releases prior to 2.1
99 at least yield runtime exceptions (the import of
Fred Drake39778b72001-03-23 16:20:46 +0000100 \module{__future__} will fail, because there was no module of
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000101 that name prior to 2.1).
102
103\item To document when incompatible changes were introduced, and when they
104 will be --- or were --- made mandatory. This is a form of executable
105 documentation, and can be inspected programatically via importing
Fred Drake39778b72001-03-23 16:20:46 +0000106 \module{__future__} and examining its contents.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000107
108\end{itemize}
109
110Each statment in \file{__future__.py} is of the form:
111
112\begin{verbatim}
113FeatureName = "_Feature(" OptionalRelease "," MandatoryRelease ")"
114\end{verbatim}
115
Fred Drake39778b72001-03-23 16:20:46 +0000116where, normally, OptionalRelease is less then MandatoryRelease, and
117both are 5-tuples of the same form as \code{sys.version_info}:
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000118
119\begin{verbatim}
120 (PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int
121 PY_MINOR_VERSION, # the 1; an int
122 PY_MICRO_VERSION, # the 0; an int
123 PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string
124 PY_RELEASE_SERIAL # the 3; an int
125 )
126\end{verbatim}
127
128OptionalRelease records the first release in which the feature was
129accepted.
130
131In the case of MandatoryReleases that have not yet occurred,
132MandatoryRelease predicts the release in which the feature will become
133part of the language.
134
135Else MandatoryRelease records when the feature became part of the
136language; in releases at or after that, modules no longer need a
137future statement to use the feature in question, but may continue to
138use such imports.
139
Fred Drake39778b72001-03-23 16:20:46 +0000140MandatoryRelease may also be \code{None}, meaning that a planned
141feature got dropped.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000142
143Instances of class \class{_Feature} have two corresponding methods,
Fred Drake39778b72001-03-23 16:20:46 +0000144\method{getOptionalRelease()} and \method{getMandatoryRelease()}.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000145
Fred Drake39778b72001-03-23 16:20:46 +0000146No feature description will ever be deleted from \module{__future__}.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000147
Fred Drake39778b72001-03-23 16:20:46 +0000148\section{Nested scopes \label{nested-scopes}}
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000149\indexii{nested}{scopes}
150
Jeremy Hyltonaa90adc2001-03-23 17:23:50 +0000151This section defines the new scoping semantics that will be introduced
152in Python 2.2. They are available in Python 2.1 by using the future
153statement \samp{nested_scopes}. This section begins with a bit of
154terminology.
155
156\subsection{Definitions and rules \label{defintions}}
157
158\dfn{Names} refer to objects. Names are introduced by name binding
159operations. Each occurrence of a name in the program text refers to
160the binding of that name established in the innermost function block
161containing the use.
162
163A \dfn{block} is a pice of Python program text that can is executed as
164a unit. The following are blocks: a module, a function body, and a
165class defintion.
166
167A \dfn{scope} defines the visibility of a name within a block. If a
168local variable is defined in a block, it's scope includes that block.
169If the definition occurs in a function block, the scope extends to any
170blocks contained within the defining one, unless a contained block
171introduces a different binding for the name. The scope of names
172defined in a class block is limited to the class block; it does not
173extend to the code blocks of methods.
174
175When a name is used in a code block, it is resolved using the nearest
176enclosing scope. The set of all such scopes visible to a code block
177is called the block's \dfn{environment}.
178
179If a name is bound in a block, it is a local variable of that block.
180If a name is bound at the module level, it is a global variable. (The
Fred Drakee2645772001-03-28 16:55:53 +0000181variables of the module code block are local and global.) If a
Jeremy Hyltonaa90adc2001-03-23 17:23:50 +0000182variable is used in a code block but not defined there, it is a
183\dfn{free variable}.
184
185The name binding operations are assignment, class and function
186definition, import statements, for statements, and except statements.
187Each assignment or import statement occurs within a block defined by a
188class or function definition or at the module level (the top-level
189code block).
190
191If a name binding operation occurs anywhere within a code block, all
192uses of the name within the block are treated as references to the
193current block. This can lead to errors when a name is used within a
194block before it is bound.
195
196The previous rule is a subtle. Python lacks declarations and allows
197name binding operations to occur anywhere within a code block. The
198local variables of a code block can be determined by scanning the
199entire text of the block for name binding operations.
200
201If the global statement occurs within a block, all uses of the name
202specified in the statement refer to the binding of that name in the
203top-level namespace. Names are resolved in the top-level namespace by
204searching the global namespace, i.e. the namespace of the module
205containing the code block, and the builtin namespace, the namespace of
206the module \module{__builtin__}. The global namespace is searched
207first. If the name is not found there, the builtin namespace is
208searched. The global statement must precede all uses of the name.
209
210The global statement has the same scope as a name binding operation
211in the same block. If the nearest enclosing scope for a free variable
212contains a global statement, the free variable is treated as a global.
213
214A class definition is an executable statement that may use and define
215names. These references follow the normal rules for name resolution.
216The namespace of the class definition becomes the attribute dictionary
217of the class. Names defined at the class scope are not visible in
218methods.
219
220\subsection{Interaction with dynamic features \label{dynamic-features}}
221
222There are several cases where Python statements are illegal when
223used in conjunction with nested scopes that contain free
224variables.
225
226If a variable is referenced in an enclosing scope, it is illegal
227to delete the name. An error will be reported at compile time.
228
229If the wild card form of import --- \samp{import *} --- is used in a
230function and the function contains or is a nested block with free
231variables, the compiler will raise a SyntaxError.
232
233If exec is used in a function and the function contains or is a nested
234block with free variables, the compiler will raise a SyntaxError
235unless the exec explicitly specifies the local namespace for the exec.
236(In other words, "exec obj" would be illegal, but "exec obj in ns"
237would be legal.)
238
239The builtin functions \function{eval()} and \function{input()} can not
240access free variables unless the variables are also referenced by the
241program text of the block that contains the call to \function{eval()}
242or \function{input()}.
243
244\emph{Compatibility note}: The compiler for Python 2.1 will issue
245warnings for uses of nested functions that will behave differently
246with nested scopes. The warnings will not be issued if nested scopes
247are enabled via a future statement. If a name bound in a function
248scope and the function contains a nested function scope that uses the
249name, the compiler will issue a warning. The name resolution rules
250will result in different bindings under Python 2.1 than under Python
2512.2. The warning indicates that the program may not run correctly
252with all versions of Python.