blob: 28f62aeba752c5ad57d828523875b6d5a4b84237 [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
Michael W. Hudson53da3172001-08-27 20:02:17 +000043The features recognized by Python 2.2 are \samp{generators},
44\samp{division} and \samp{nested_scopes}. \samp{nested_scopes}
45is redundant in 2.2 as the nested scopes feature is active by default.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000046
Michael W. Hudson53da3172001-08-27 20:02:17 +000047A future statement is recognized and treated specially at compile
48time: Changes to the semantics of core constructs are often
49implemented by generating different code. It may even be the case
50that a new feature introduces new incompatible syntax (such as a new
51reserved word), in which case the compiler may need to parse the
52module differently. Such decisions cannot be pushed off until
53runtime.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000054
55For any given release, the compiler knows which feature names have been
56defined, and raises a compile-time error if a future statement contains
57a feature not known to it.
58
59The direct runtime semantics are the same as for any import statement:
Fred Drake39778b72001-03-23 16:20:46 +000060there is a standard module \module{__future__}, described later, and
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000061it will be imported in the usual way at the time the future statement
62is executed.
63
64The interesting runtime semantics depend on the specific feature
65enabled by the future statement.
66
67Note that there is nothing special about the statement:
68
69\begin{verbatim}
70import __future__ [as name]
71\end{verbatim}
72
Fred Drake39778b72001-03-23 16:20:46 +000073That is not a future statement; it's an ordinary import statement with
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000074no special semantics or syntax restrictions.
75
76Code compiled by an exec statement or calls to the builtin functions
Fred Drake39778b72001-03-23 16:20:46 +000077\function{compile()} and \function{execfile()} that occur in a module
Michael W. Hudson53da3172001-08-27 20:02:17 +000078\module{M} containing a future statement will, by default, use the new
79syntax or semantics associated with the future statement. This can,
80starting with Python 2.2 be controlled by optional arguments to
81\function{compile()} --- see the documentation of that function in the
82library reference for details.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000083
84A future statement typed at an interactive interpreter prompt will
85take effect for the rest of the interpreter session. If an
Fred Drake39778b72001-03-23 16:20:46 +000086interpreter is started with the \programopt{-i} option, is passed a
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000087script name to execute, and the script includes a future statement, it
88will be in effect in the interactive session started after the script
89is executed.
90
91\section{\module{__future__} ---
92 Future statement definitions}
93
Fred Drake39778b72001-03-23 16:20:46 +000094\declaremodule[future]{standard}{__future__}
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000095\modulesynopsis{Future statement definitions}
96
Fred Drake39778b72001-03-23 16:20:46 +000097\module{__future__} is a real module, and serves three purposes:
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000098
99\begin{itemize}
100
101\item To avoid confusing existing tools that analyze import statements
102 and expect to find the modules they're importing.
103
104\item To ensure that future_statements run under releases prior to 2.1
105 at least yield runtime exceptions (the import of
Fred Drake39778b72001-03-23 16:20:46 +0000106 \module{__future__} will fail, because there was no module of
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000107 that name prior to 2.1).
108
109\item To document when incompatible changes were introduced, and when they
110 will be --- or were --- made mandatory. This is a form of executable
111 documentation, and can be inspected programatically via importing
Fred Drake39778b72001-03-23 16:20:46 +0000112 \module{__future__} and examining its contents.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000113
114\end{itemize}
115
116Each statment in \file{__future__.py} is of the form:
117
118\begin{verbatim}
Michael W. Hudson53da3172001-08-27 20:02:17 +0000119FeatureName = "_Feature(" OptionalRelease "," MandatoryRelease ","
120 CompilerFlag ")"
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000121\end{verbatim}
122
Fred Drake39778b72001-03-23 16:20:46 +0000123where, normally, OptionalRelease is less then MandatoryRelease, and
124both are 5-tuples of the same form as \code{sys.version_info}:
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000125
126\begin{verbatim}
127 (PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int
128 PY_MINOR_VERSION, # the 1; an int
129 PY_MICRO_VERSION, # the 0; an int
130 PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string
131 PY_RELEASE_SERIAL # the 3; an int
132 )
133\end{verbatim}
134
135OptionalRelease records the first release in which the feature was
136accepted.
137
138In the case of MandatoryReleases that have not yet occurred,
139MandatoryRelease predicts the release in which the feature will become
140part of the language.
141
142Else MandatoryRelease records when the feature became part of the
143language; in releases at or after that, modules no longer need a
144future statement to use the feature in question, but may continue to
145use such imports.
146
Fred Drake39778b72001-03-23 16:20:46 +0000147MandatoryRelease may also be \code{None}, meaning that a planned
148feature got dropped.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000149
150Instances of class \class{_Feature} have two corresponding methods,
Fred Drake39778b72001-03-23 16:20:46 +0000151\method{getOptionalRelease()} and \method{getMandatoryRelease()}.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000152
Michael W. Hudson53da3172001-08-27 20:02:17 +0000153CompilerFlag is the (bitfield) flag that should be passed in the
154fourth argument to the builtin function \function{compile()} to enable
155the feature in dynamically compiled code. This flag is stored in the
156\member{compiler_flag} attribute on \class{_Future} instances.
157
Fred Drake39778b72001-03-23 16:20:46 +0000158No feature description will ever be deleted from \module{__future__}.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000159
Fred Drake39778b72001-03-23 16:20:46 +0000160\section{Nested scopes \label{nested-scopes}}
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000161\indexii{nested}{scopes}
162
Jeremy Hyltonaa90adc2001-03-23 17:23:50 +0000163This section defines the new scoping semantics that will be introduced
164in Python 2.2. They are available in Python 2.1 by using the future
165statement \samp{nested_scopes}. This section begins with a bit of
166terminology.
167
Fred Drake316141b2001-10-18 15:22:23 +0000168\subsection{Definitions and rules \label{definitions}}
Jeremy Hyltonaa90adc2001-03-23 17:23:50 +0000169
170\dfn{Names} refer to objects. Names are introduced by name binding
171operations. Each occurrence of a name in the program text refers to
172the binding of that name established in the innermost function block
173containing the use.
174
175A \dfn{block} is a pice of Python program text that can is executed as
176a unit. The following are blocks: a module, a function body, and a
177class defintion.
178
179A \dfn{scope} defines the visibility of a name within a block. If a
180local variable is defined in a block, it's scope includes that block.
181If the definition occurs in a function block, the scope extends to any
182blocks contained within the defining one, unless a contained block
183introduces a different binding for the name. The scope of names
184defined in a class block is limited to the class block; it does not
185extend to the code blocks of methods.
186
187When a name is used in a code block, it is resolved using the nearest
188enclosing scope. The set of all such scopes visible to a code block
189is called the block's \dfn{environment}.
190
191If a name is bound in a block, it is a local variable of that block.
192If a name is bound at the module level, it is a global variable. (The
Fred Drakee2645772001-03-28 16:55:53 +0000193variables of the module code block are local and global.) If a
Jeremy Hyltonaa90adc2001-03-23 17:23:50 +0000194variable is used in a code block but not defined there, it is a
195\dfn{free variable}.
196
197The name binding operations are assignment, class and function
198definition, import statements, for statements, and except statements.
199Each assignment or import statement occurs within a block defined by a
200class or function definition or at the module level (the top-level
201code block).
202
203If a name binding operation occurs anywhere within a code block, all
204uses of the name within the block are treated as references to the
205current block. This can lead to errors when a name is used within a
206block before it is bound.
207
208The previous rule is a subtle. Python lacks declarations and allows
209name binding operations to occur anywhere within a code block. The
210local variables of a code block can be determined by scanning the
211entire text of the block for name binding operations.
212
213If the global statement occurs within a block, all uses of the name
214specified in the statement refer to the binding of that name in the
215top-level namespace. Names are resolved in the top-level namespace by
216searching the global namespace, i.e. the namespace of the module
217containing the code block, and the builtin namespace, the namespace of
218the module \module{__builtin__}. The global namespace is searched
219first. If the name is not found there, the builtin namespace is
220searched. The global statement must precede all uses of the name.
221
222The global statement has the same scope as a name binding operation
223in the same block. If the nearest enclosing scope for a free variable
224contains a global statement, the free variable is treated as a global.
225
226A class definition is an executable statement that may use and define
227names. These references follow the normal rules for name resolution.
228The namespace of the class definition becomes the attribute dictionary
229of the class. Names defined at the class scope are not visible in
230methods.
231
232\subsection{Interaction with dynamic features \label{dynamic-features}}
233
234There are several cases where Python statements are illegal when
235used in conjunction with nested scopes that contain free
236variables.
237
238If a variable is referenced in an enclosing scope, it is illegal
239to delete the name. An error will be reported at compile time.
240
241If the wild card form of import --- \samp{import *} --- is used in a
242function and the function contains or is a nested block with free
243variables, the compiler will raise a SyntaxError.
244
245If exec is used in a function and the function contains or is a nested
246block with free variables, the compiler will raise a SyntaxError
247unless the exec explicitly specifies the local namespace for the exec.
248(In other words, "exec obj" would be illegal, but "exec obj in ns"
249would be legal.)
250
251The builtin functions \function{eval()} and \function{input()} can not
252access free variables unless the variables are also referenced by the
253program text of the block that contains the call to \function{eval()}
254or \function{input()}.
255
256\emph{Compatibility note}: The compiler for Python 2.1 will issue
257warnings for uses of nested functions that will behave differently
258with nested scopes. The warnings will not be issued if nested scopes
259are enabled via a future statement. If a name bound in a function
260scope and the function contains a nested function scope that uses the
261name, the compiler will issue a warning. The name resolution rules
262will result in different bindings under Python 2.1 than under Python
2632.2. The warning indicates that the program may not run correctly
264with all versions of Python.