2012-03-27 8 views
9

私はPythonを学び始めていますが、私はv2.6.2インタプリタを使わなければなりません。Python v2.6.2でインポートする必要がある__future__機能は何ですか?

私は__future__からインポートする必要があり、他のどのような機能

from __future__ import division 
from __future__ import print_function 
print(1/2, file=sys.stderr) # 0.5 

など、新しいprint機能、「真の」除算を使用して、例えば、Pythonの3にできるだけ近い取得したいですか?

一般的にはimport __future__を実行できますが、より高いバージョン(v2.7には__future__に多くの機能が含まれている可能性があります)にアップグレードすると、別の動作が発生し、スクリプトが機能しなくなる可能性があります。 documentation, __future__がなかった場合でも、

+0

これは賢明ですか?あなたがPython 2.xを使用することを余儀なくされ、Python 3.xのスタイルでコードを書くことを開始した場合、誰かが2.xを使用するように訴える人はいないでしょうか? –

+1

@DavidHeffernan:いいえ、私は自分のスクリプトを書くことができます。 Python v2.6.2がインストールされている古いコンピュータにPython v3をインストールすることはオプションではないようです。 – Frank

+1

Python 3をインストールすることは全くオプションです – Amber

答えて

7

まあ、また自分自身についてのいくつかの情報を持っている定期的なモジュールです:

>>> import __future__ 
>>> __future__.all_feature_names 
['nested_scopes', 'generators', 'division', 'absolute_import', 'with_statement', 'print_function', 'unicode_literals'] 
>>> __future__.unicode_literals 
_Feature((2, 6, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 131072) 

のPython 2.6が既に有効な機能のほとんどを持っているので、divisionprint_functionabsolute_importから選びますおよびunicode_literals

いいえ、import __future__はあなたの思う通りに動作しません。ファイル内の最初のステートメントとしてfrom __future__ import somethingフォームを使用するのは唯一の魔法です。詳細については、the docsを参照してください。

もちろん、__future__からどれくらいインポートしても、3.xでは動作が異なります。

+0

私は 'unicode_literals'をスキップします。http://stackoverflow.com/questions/809796/any-gotchas-using-unicode-literals-in-python-2-6 – agf

+1

@agfこれらのコードは、単に 'unicode_literals'を追加するだけですが、とにかく固定しなければならないものを指しています。 Python 3のユニコードへのアプローチは、より賢明です。 –

+0

@ KarlKnechtelニック・コグランかレイモンド・ヘッチャーは、「__future__」にそれを含めることは間違いであると言って、それを使用することに賛成しました。私はそれがここにあったのか、ブログの投稿にあるのか覚えていない。私はちょうど私が今考えているものを見つけることができないので、そのリンクを使用しました。 – agf

7

他の機能は__future__からインポートする必要がありますか?

最新の動作を取得するには、とにかく取得する機能以外は、すべて__future__フィーチャーをインポートする必要があります。 (システムが設定されている方法は、古い機能は、彼らが常にオンだ後でさえも削除されません。)

なおimport __future__ますないはあなたにすべてを与える、とどちらも意志from __future__ import *from ... import ...の構文は__future__(これはどのように動作するか)のために特殊ケースですが、__future__はまだimport __future__でインポートできる実際のモジュールです。ただし、そうすることで、実際の機能名と、いつ既定になったのか、いつ使用可能になったのかについての情報が表示されます。

>>> [ 
...  name for name in __future__.all_feature_names if 
...  getattr(__future__, name).optional <= 
...  sys.version_info < 
...  getattr(__future__, name).mandatory 
... ] 

['division', 'print_function', 'unicode_literals'] 

は2.7.2で取得したものです。

関連する問題