2016-11-04 7 views
1

別の記事(https://stackoverflow.com/a/7075121/2706606)で説明したように、Pythonでは将来のものをインポートできます。Pythonに「未来の」ユニバースが1つしかありませんか?

たとえば、2/4は0と評価されます(整数除算)。

>>>print 2/4 
0 

しかし、あなたは未来から「分裂」をインポートする場合、それは私がリンクポストから理解して何を0.5

>>> from __future__ import division 
>>> print 2/4 
0.5 

に評価することは、あなたが将来の輸入を使用した場合、パーサが異なったコードを解析することです。

私の質問は、この将来のすべてのインポートが取得される単一の、ユニークな「未来の」環境だけが存在するかどうかです。

今後のインポートで将来のPythonコンパイラのバージョンとの上位互換性が保証されるにはどうすればよいですか?

「遠く離れた未来」の2/4で別の値に評価される可能性はありますか?

+0

'__future__'はほとんど死んでいるPython 2でのみ使用されます。誰もこれを将来必要としません。 – furas

+0

はい。将来の環境はPython 3と呼ばれます。 –

+2

@furas:まったくそうではありません。これは 'generator_stop'([ref](https://docs.python.org/3/library/__future__.html))のためにPy3で今でも新しいことに使用されています。未来が到着すると、輸入は何もしなくなります。それらは認識されますが無視されます(既定の構文には既にそれらが含まれているため)。あなたのPythonのバージョンにまだ存在しないものをインポートすると(例えば、 'with_statement'が2.4にインポートされている)、Pythonの古いバージョンと互換性がないことを知らせる例外が発生します。 – ShadowRanger

答えて

1

__future__のインポートを見ると、all_feature_namesと呼ばれるリストがあり、これを使ってPythonインタプリタで利用できる機能を確認できます。

import __future__ 
print(__future__.all_feature_names) 

私のマシンでは、Python 2.7.12で次のものが返されます。

['nested_scopes', 'generators', 'division', 'absolute_import', 
'with_statement', 'print_function', 'unicode_literals'] 

そしてPython 3.5.2。

['nested_scopes', 'generators', 'division', 'absolute_import', 
'with_statement', 'print_function', 'unicode_literals', 
'barry_as_FLUFL', 'generator_stop'] 

あなたは、輸入でもいくつかの実装に存在しない可能性があり、同じ機能が利用できる必要があります実行しているが、機能が使用可能であることを想定しているPythonインタプリタは実装が同じままでなければならないことが保証はありません、ほとんどのPythonインタプリタではそうであるように、PEP(例えばPEP-0238)に従って実装されていれば、

+1

レコードのために、 'from __future__ import barry_as_FLUFL'は、最も良い(http://stackoverflow.com/a/4007310/364696)' __future__'インポートです。 :-) – ShadowRanger

+0

@ShadowRanger 'from __future__ import braces'についてはどうでしょうか? – abukaj

2

将来の機能は意味を変えません。コードを示すことは行動になる前のPythonのバージョンに

  • 互換性がない例外がスローされ、今後の行動が定義されていた前のPythonのバージョンに

    1. from __future__ import xは、3つの行動を持っていることを保証されていますデフォルトでは、それは動作がデフォルトになった後、輸入が認められたが、

    を無視している彼らはそれ以来(後に他の何かを意味する名前を再利用しないのPythonのバージョンで動作

  • を可能にします〜だろう#3のために "認識されているが無視された"規則を却下する)。たとえば、divisionと変更する場合は、新しい名前を使用する必要があります。フロア分割ではなくゼロ分割に切り捨てるようにするには、__future__のインポートをtruncating_divisionとすることがあります。しかし、彼らは限りPythonが存在するとして、これまで、divisionは削除されません、また彼らは、意味が変更されます。

    ん機能の説明はこれまで__future__から削除されません。

  • 関連する問題