すでにいくつかの素晴らしい答えがありますが、それらのどれもが __future__
現在声明がサポートしている。
簡単に言えば、文は、言語の新しい機能を使用するためにはPythonインタプリタを強制します。__future__
現在サポートされている機能は次のとおりです。
nested_scopes
Python 2.1以前では、次のコードはNameErrorを発生させていました:
def f():
...
def g(value):
...
return g(value-1) + 1
...
from __future__ import nested_scopes
ディレクティブを有効にするには、この機能を可能にします。
generators
連続する関数呼び出し間の状態を保存するために、以下のようなジェネレーター関数が導入されました。
def fib():
a, b = 0, 1
while 1:
yield b
a, b = b, a+b
division
Python 2.xバージョンではクラシック除算が使用されます。分割ステートメントには、分割の妥当な近似(「真の分割」)を返すものと、フロア(「床分割」)を返すものがあります。Python 3.0以降では、真の分割はによって指定されますがx/y
、床の分割はx//y
ます。
このfrom __future__ import division
ディレクティブは、Python 3.0スタイルの除算の使用を強制します。
absolute_import
括弧で複数のimport
ステートメントを囲むことができます。例えば:
from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
LEFT, DISABLED, NORMAL, RIDGE, END)
の代わりに:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, \
LEFT, DISABLED, NORMAL, RIDGE, END
または:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text
from Tkinter import LEFT, DISABLED, NORMAL, RIDGE, END
with_statement
ステートメントwith
をPythonのキーワードとして追加して、ステートメントを不要にしtry/finally
ます。これの一般的な用途は、次のようなファイルI / Oを行う場合です。
with open('workfile', 'r') as f:
read_data = f.read()
print_function
:
スタイルステートメントのprint()
代わりに、Python 3の括弧スタイルの関数呼び出しを強制的に使用しますprint MESSAGE
。
unicode_literals
bytes
オブジェクトのリテラル構文を紹介します。などのステートメントbytes('Hello world', 'ascii')
は、として簡単に表現できることを意味しb'Hello world'
ます。
generator_stop
StopIteration
ジェネレータ関数内で使用される例外の使用を例外に置き換えますRuntimeError
。
上記で言及されていないもう1つの用途は__future__
、古いバージョンを使用するとランタイム例外がスローされるため、このステートメントではPython 2.1+インタープリターの使用も必要になることです。
参考文献