Python の__future__
-
Python の
print_function
には__future__
を使用する -
Python の
unicode_laterals
には__future__
を使用する -
Python の除算には
__future__
を使用する -
Python の
absolute_import
には__future__
を使用する -
Python の
annotations
には__future__
を使用してください -
ネストされたスコープには
__future__
を使用する -
Python ジェネレーターには
__future__
を使用する -
with
ステートメントには__future__
を使用する
__future__
は Python 2.1 で導入され、そのステートメントは Python がコードを解釈する方法を変更します。これは、将来の Python バージョンで使用できるステートメントとしていくつかのステートメントをコンパイルするようにインタープリターに指示します。つまり、Python は from __future__ import feature
を使用して、より高い Python バージョンから現在のインタープリターに機能をバックポートします。
from __future__ import
が表示されている場合は、Python の最新リリースまたは今後のリリースの機能が以前のバージョンにバックポートされていることを意味します。
このチュートリアルでは、__future__
を使用して以前のバージョンの Python で Python 3 ですでに有効になっている機能について説明します。
Python の print_function
には __future__
を使用する
ステートメントの代わりに関数として print キーワードを使用すると、柔軟性が大幅に向上し、print
キーワードの機能を拡張するのに役立ちます。from __future__ import print_function
の主な機能は、print
関数を Python 3 から Python 2 に取り込むことです。
例えば、
from __future__ import print_function
for x in range(0, 10):
print(x, sep=" ", end="")
出力:
0123456789
ここでの print
は関数として使用されていることに注意してください。これは、以前は Python 2.x でステートメントとして使用されていました。
Python の unicode_laterals
には __future__
を使用する
これにより、文字列リテラルのタイプを変更できます。
Python 2 では文字列リテラルはデフォルトで ‘str’ですが、from __future__ import unicode_literals
を使用すると、文字列リテラルのタイプが Unicode
に変わります。
例えば、
type("h")
出力:
<type 'str'>
しかし、from __future__ import unicode_literals
を使用すると、次の出力が得られます。
from __future__ import unicode_literals
type("h")
出力:
<type 'unicode'>
from __future__ import
を使用すると、すべての文字列の前に u
を付けて Unicode
として扱う必要がないことに注意してください。
Python の除算には __future__
を使用する
Python 2.x バージョンでは、従来の除算が使用されます。
print(8 / 7)
出力:
0
Python 2.x では、8 を 7 で単純に除算すると 0 が返されます。
from __future__ import division
を使用すると、Python 2 プログラムで __truediv__()
を使用できます。
例えば、
from __future__ import division
print(8 / 7)
出力:
1.1428571428571428
Python の absolute_import
には __future__
を使用する
Python 2 では、暗黙的な相対インポートのみを行うことができましたが、Python 3 では、明示的なインポートまたは絶対インポートを行うことができます。__future__ import absolute_import
を使用すると、括弧内に複数のインポートステートメントを角かっこで囲むことができます。
例えば、
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, LEFT, DISABLED, NORMAL, END
__future__ import absolute_import
機能がないと、1 行のコードで複数の import
ステートメントを囲むことができないことに注意してください。
Python の annotations
には __future__
を使用してください
アノテーションは、関数のさまざまな部分に関連付けられた Python 式です。
ここで、from __future__ import annotations
を使用すると、Python モジュールで評価されるアノテーションの入力方法が変更されます。注釈の評価を延期し、すべての注釈を異なる注釈として魔法のように扱います。
例えば、
from __future__ import annotations
class C:
@classmethod
def make(cls) -> C:
return cls
上記のコードは、__future__ import
がコードの先頭に記述されている場合にのみ機能することに注意してください。これは、Python がコードを解釈する方法を変更するためです。つまり、アノテーションを個別の文字列として扱います。
ネストされたスコープには __future__
を使用する
__future__ import nested_scopes
の追加により、静的にネストされたスコープが Python に導入されました。これにより、エラーを返さずに次のタイプのコードを実行できます。
def h():
...
def m(value):
...
return m(value - 1) + 1
...
上記のコードでは、Python 2.1 より前に NameError が発生することに注意してください。
Python ジェネレーターには __future__
を使用する
ジェネレーターは、通常の関数として定義された Python の関数です。それでも、特定の値を生成する必要があるときはいつでも、return ではなく yield
キーワードを使用してそれを行います。
ここでは、from __future__ import generators
を使用して、連続する関数呼び出し間の状態を保存するジェネレーター関数が導入されました。
例えば、
def gen():
c, d = 0, 1
while 1:
yield d
c, d = d, c + d
with
ステートメントには __future__
を使用する
これにより、Python でキーワードとして with
ステートメントを追加することにより、try...except
ステートメントの使用が排除されます。以下の例に示すように、主にファイル I / O の実行中に使用されます。
with open("workfile", "h") as a:
read_data = a.read()