Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
cf9c4671
Kaydet (Commit)
cf9c4671
authored
May 28, 2003
tarafından
Jeremy Hylton
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
*** empty log message ***
üst
bc6e94a0
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
0 additions
and
160 deletions
+0
-160
refa1.tex
Doc/ref/refa1.tex
+0
-160
No files found.
Doc/ref/refa1.tex
deleted
100644 → 0
Dosyayı görüntüle @
bc6e94a0
\chapter
{
Future statements and nested scopes
\label
{
futures
}}
\sectionauthor
{
Jeremy Hylton
}{
jeremy@alum.mit.edu
}
The semantics of Python's static scoping will change in version 2.2 to
support resolution of unbound local names in enclosing functions'
namespaces. The new semantics will be available in Python 2.1 through
the use of a future statement. This appendix documents these two
features for Python 2.1; it will be removed in Python 2.2 and the
features will be documented in the main sections of this manual.
\section
{
Future statements
\label
{
future-statements
}}
A
\dfn
{
future statement
}
\indexii
{
future
}{
statement
}
is a directive to
the compiler that a particular module should be compiled using syntax
or semantics that will be available in a specified future release of
Python. The future statement is intended to ease migration to future
versions of Python that introduce incompatible changes to the
language. It allows use of the new features on a per-module basis
before the release in which the feature becomes standard.
\begin{productionlist}
[*]
\production
{
future
_
statement
}
{
"from" "
__
future
__
" "import" feature ["as" name]
}
\productioncont
{
("," feature ["as" name])*
}
\production
{
feature
}{
identifier
}
\production
{
name
}{
identifier
}
\end{productionlist}
A future statement must appear near the top of the module. The only
lines that can appear before a future statement are:
\begin{itemize}
\item
the module docstring (if any),
\item
comments,
\item
blank lines, and
\item
other future statements.
\end{itemize}
The features recognized by Python 2.3 are
\samp
{
generators
}
,
\samp
{
division
}
and
\samp
{
nested
_
scopes
}
.
\samp
{
generators
}
and
\samp
{
nested
_
scopes
}
are redundant in 2.3 because they are always
enabled.
A future statement is recognized and treated specially at compile
time: Changes to the semantics of core constructs are often
implemented by generating different code. It may even be the case
that a new feature introduces new incompatible syntax (such as a new
reserved word), in which case the compiler may need to parse the
module differently. Such decisions cannot be pushed off until
runtime.
For any given release, the compiler knows which feature names have been
defined, and raises a compile-time error if a future statement contains
a feature not known to it.
The direct runtime semantics are the same as for any import statement:
there is a standard module
\module
{__
future
__}
, described later, and
it will be imported in the usual way at the time the future statement
is executed.
The interesting runtime semantics depend on the specific feature
enabled by the future statement.
Note that there is nothing special about the statement:
\begin{verbatim}
import
__
future
__
[as name]
\end{verbatim}
That is not a future statement; it's an ordinary import statement with
no special semantics or syntax restrictions.
Code compiled by an exec statement or calls to the builtin functions
\function
{
compile()
}
and
\function
{
execfile()
}
that occur in a module
\module
{
M
}
containing a future statement will, by default, use the new
syntax or semantics associated with the future statement. This can,
starting with Python 2.2 be controlled by optional arguments to
\function
{
compile()
}
--- see the documentation of that function in the
library reference for details.
A future statement typed at an interactive interpreter prompt will
take effect for the rest of the interpreter session. If an
interpreter is started with the
\programopt
{
-i
}
option, is passed a
script name to execute, and the script includes a future statement, it
will be in effect in the interactive session started after the script
is executed.
\section
{
\module
{__
future
__}
---
Future statement definitions
}
\declaremodule
[future]
{
standard
}{__
future
__}
\modulesynopsis
{
Future statement definitions
}
\module
{__
future
__}
is a real module, and serves three purposes:
\begin{itemize}
\item
To avoid confusing existing tools that analyze import statements
and expect to find the modules they're importing.
\item
To ensure that future
_
statements run under releases prior to 2.1
at least yield runtime exceptions (the import of
\module
{__
future
__}
will fail, because there was no module of
that name prior to 2.1).
\item
To document when incompatible changes were introduced, and when they
will be --- or were --- made mandatory. This is a form of executable
documentation, and can be inspected programatically via importing
\module
{__
future
__}
and examining its contents.
\end{itemize}
Each statment in
\file
{__
future
__
.py
}
is of the form:
\begin{verbatim}
FeatureName = "
_
Feature(" OptionalRelease "," MandatoryRelease ","
CompilerFlag ")"
\end{verbatim}
where, normally, OptionalRelease is less then MandatoryRelease, and
both are 5-tuples of the same form as
\code
{
sys.version
_
info
}
:
\begin{verbatim}
(PY
_
MAJOR
_
VERSION, # the 2 in 2.1.0a3; an int
PY
_
MINOR
_
VERSION, # the 1; an int
PY
_
MICRO
_
VERSION, # the 0; an int
PY
_
RELEASE
_
LEVEL, # "alpha", "beta", "candidate" or "final"; string
PY
_
RELEASE
_
SERIAL # the 3; an int
)
\end{verbatim}
OptionalRelease records the first release in which the feature was
accepted.
In the case of MandatoryReleases that have not yet occurred,
MandatoryRelease predicts the release in which the feature will become
part of the language.
Else MandatoryRelease records when the feature became part of the
language; in releases at or after that, modules no longer need a
future statement to use the feature in question, but may continue to
use such imports.
MandatoryRelease may also be
\code
{
None
}
, meaning that a planned
feature got dropped.
Instances of class
\class
{_
Feature
}
have two corresponding methods,
\method
{
getOptionalRelease()
}
and
\method
{
getMandatoryRelease()
}
.
CompilerFlag is the (bitfield) flag that should be passed in the
fourth argument to the builtin function
\function
{
compile()
}
to enable
the feature in dynamically compiled code. This flag is stored in the
\member
{
compiler
_
flag
}
attribute on
\class
{_
Future
}
instances.
No feature description will ever be deleted from
\module
{__
future
__}
.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment