blob: fe1bc75269a6b0519635d45a12f875889e12d750 [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
Fred Drake53815882002-03-15 23:21:37 +000023\begin{productionlist}[*]
24 \production{future_statement}
25 {"from" "__future__" "import" feature ["as" name]}
26 \productioncont{("," feature ["as" name])*}
27 \production{feature}{identifier}
28 \production{name}{identifier}
29\end{productionlist}
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000030
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
Jeremy Hyltone7d57732002-04-01 20:38:01 +000043The features recognized by Python 2.3 are \samp{generators},
44\samp{division} and \samp{nested_scopes}. \samp{generators} and
45\samp{nested_scopes} are redundant in 2.3 because they are always
46enabled.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000047
Michael W. Hudson53da3172001-08-27 20:02:17 +000048A future statement is recognized and treated specially at compile
49time: Changes to the semantics of core constructs are often
50implemented by generating different code. It may even be the case
51that a new feature introduces new incompatible syntax (such as a new
52reserved word), in which case the compiler may need to parse the
53module differently. Such decisions cannot be pushed off until
54runtime.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000055
56For any given release, the compiler knows which feature names have been
57defined, and raises a compile-time error if a future statement contains
58a feature not known to it.
59
60The direct runtime semantics are the same as for any import statement:
Fred Drake39778b72001-03-23 16:20:46 +000061there is a standard module \module{__future__}, described later, and
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000062it will be imported in the usual way at the time the future statement
63is executed.
64
65The interesting runtime semantics depend on the specific feature
66enabled by the future statement.
67
68Note that there is nothing special about the statement:
69
70\begin{verbatim}
71import __future__ [as name]
72\end{verbatim}
73
Fred Drake39778b72001-03-23 16:20:46 +000074That is not a future statement; it's an ordinary import statement with
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000075no special semantics or syntax restrictions.
76
77Code compiled by an exec statement or calls to the builtin functions
Fred Drake39778b72001-03-23 16:20:46 +000078\function{compile()} and \function{execfile()} that occur in a module
Michael W. Hudson53da3172001-08-27 20:02:17 +000079\module{M} containing a future statement will, by default, use the new
80syntax or semantics associated with the future statement. This can,
81starting with Python 2.2 be controlled by optional arguments to
82\function{compile()} --- see the documentation of that function in the
83library reference for details.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000084
85A future statement typed at an interactive interpreter prompt will
86take effect for the rest of the interpreter session. If an
Fred Drake39778b72001-03-23 16:20:46 +000087interpreter is started with the \programopt{-i} option, is passed a
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000088script name to execute, and the script includes a future statement, it
89will be in effect in the interactive session started after the script
90is executed.
91
92\section{\module{__future__} ---
Jeremy Hylton4a98f702001-11-14 21:32:27 +000093 Future statement definitions}
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000094
Fred Drake39778b72001-03-23 16:20:46 +000095\declaremodule[future]{standard}{__future__}
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000096\modulesynopsis{Future statement definitions}
97
Fred Drake39778b72001-03-23 16:20:46 +000098\module{__future__} is a real module, and serves three purposes:
Jeremy Hylton324cc6e2001-03-23 15:29:54 +000099
100\begin{itemize}
101
102\item To avoid confusing existing tools that analyze import statements
103 and expect to find the modules they're importing.
104
105\item To ensure that future_statements run under releases prior to 2.1
106 at least yield runtime exceptions (the import of
Fred Drake39778b72001-03-23 16:20:46 +0000107 \module{__future__} will fail, because there was no module of
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000108 that name prior to 2.1).
109
110\item To document when incompatible changes were introduced, and when they
111 will be --- or were --- made mandatory. This is a form of executable
112 documentation, and can be inspected programatically via importing
Fred Drake39778b72001-03-23 16:20:46 +0000113 \module{__future__} and examining its contents.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000114
115\end{itemize}
116
117Each statment in \file{__future__.py} is of the form:
118
119\begin{verbatim}
Michael W. Hudson53da3172001-08-27 20:02:17 +0000120FeatureName = "_Feature(" OptionalRelease "," MandatoryRelease ","
121 CompilerFlag ")"
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000122\end{verbatim}
123
Fred Drake39778b72001-03-23 16:20:46 +0000124where, normally, OptionalRelease is less then MandatoryRelease, and
125both are 5-tuples of the same form as \code{sys.version_info}:
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000126
127\begin{verbatim}
128 (PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int
129 PY_MINOR_VERSION, # the 1; an int
130 PY_MICRO_VERSION, # the 0; an int
131 PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string
132 PY_RELEASE_SERIAL # the 3; an int
133 )
134\end{verbatim}
135
136OptionalRelease records the first release in which the feature was
137accepted.
138
139In the case of MandatoryReleases that have not yet occurred,
140MandatoryRelease predicts the release in which the feature will become
141part of the language.
142
143Else MandatoryRelease records when the feature became part of the
144language; in releases at or after that, modules no longer need a
145future statement to use the feature in question, but may continue to
146use such imports.
147
Fred Drake39778b72001-03-23 16:20:46 +0000148MandatoryRelease may also be \code{None}, meaning that a planned
149feature got dropped.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000150
151Instances of class \class{_Feature} have two corresponding methods,
Fred Drake39778b72001-03-23 16:20:46 +0000152\method{getOptionalRelease()} and \method{getMandatoryRelease()}.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000153
Michael W. Hudson53da3172001-08-27 20:02:17 +0000154CompilerFlag is the (bitfield) flag that should be passed in the
155fourth argument to the builtin function \function{compile()} to enable
156the feature in dynamically compiled code. This flag is stored in the
157\member{compiler_flag} attribute on \class{_Future} instances.
158
Fred Drake39778b72001-03-23 16:20:46 +0000159No feature description will ever be deleted from \module{__future__}.
Jeremy Hylton324cc6e2001-03-23 15:29:54 +0000160