Pythonの2.5のためのバックポート - with文
-
20-09-2019 - |
質問
私はいくつかの製品コードではPython 2.5でwith
ステートメントを使用したいと思います。これは、バックポート、私は何の問題(例えば、他のマシンの/ etc上の利用可能性/互換性)を期待すべきでしたか?
このコードは
from __future__ import with_statement
はPython 2.6との互換性がありますか?
解決
with_statementはバックポートされたが、Pythonの2.5で実装されていませんでした。新しいキーワードや構文を追加すると、既存のアプリケーションを破壊することができます。 Pythonのでは、彼らがこれを処理することを決定した方法は、人々がオプトインするためにこれらの機能に早期あなたがゆっくりと自分のコードの上に移行することができるように許可されます。
http://python.org/doc/2.5.2/からREF / future.htmlする
将来のステートメントはへディレクティブです コンパイラの特定のモジュール 構文を使用してコンパイルする必要がありますか で利用できるようになりますセマンティクス パイソンの将来のリリースを指定しました。 将来の声明をすることを意図しています の将来のバージョンへの移行を容易に 互換性のないご紹介パイソン 言語の変更。それは使用することができます モジュール単位での新機能の でリリース前の基礎 機能が標準となります。
あなたが実際など、最初にサポートされている場合、インポートはもはや必要ない場合は、上の情報を取得するために先物を検査することができます。
Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import __future__
>>> dir(__future__)
['CO_FUTURE_ABSOLUTE_IMPORT', 'CO_FUTURE_DIVISION', 'CO_FUTURE_WITH_STATEMENT', 'CO_GENERATOR_ALLOWED', 'CO_NESTED', '_Feature', '__all__', '__builtins__',
__doc__', '__file__', '__name__', 'absolute_import', 'all_feature_names', 'division', 'generators', 'nested_scopes', 'with_statement']
>>> __future__.with_statement
_Feature((2, 5, 0, 'alpha', 1), (2, 6, 0, 'alpha', 0), 32768)
>>>
私は個人的に重くも一年以上のPython 2.5でwith_statementを使用しているとの問題を持っていませんでした。私はまた、透過的にはPython 2.6でそのコードを実行します。彼らは主にきれいにし、正しく文を使用して、ネストされた圧縮に関連し、言語にクリーンアップで働いてきたいくつかの奇妙なコーナーケースがあります。
他のヒント
はい、その文は、Python 2.6で何も操作されていないので、あなたは自由に2.6でコードの動作に影響を与えることなく、同様にあなたの2.5のコードでwith
キーワードを作るためにそれを使用することができます。これは、実際にはPythonで「未来からのインポート」の一般的な設計意図です!
あなたは(それがそこには-OPません)問題なくPythonの2.6および3.0 / 1でこれを呼び出すことができます。