с заявлением - backport для Python 2.5 - PullRequest
4 голосов
/ 16 декабря 2009

Я бы хотел использовать оператор with в Python 2.5 в некотором производственном коде. Он был портирован, стоит ли ожидать каких-либо проблем (например, с доступностью / совместимостью на других машинах / и т.д.)?

Это код

from __future__ import with_statement

совместим с Python 2.6?

Ответы [ 3 ]

7 голосов
/ 16 декабря 2009

Да, этот оператор не используется в Python 2.6, поэтому вы можете свободно использовать его, чтобы сделать with ключевым словом в вашем коде 2.5, не затрагивая работу вашего кода в 2.6. На самом деле это общее намерение «импортировать из будущего» в Python!

4 голосов
/ 16 декабря 2009

Вы можете вызвать это в Python 2.6 и 3.0 / 1 без проблем (там нет операции).

3 голосов
/ 16 декабря 2009

with_statement не был обратно портирован, но реализован в Python 2.5. Добавление новых ключевых слов или синтаксиса может сломать существующие приложения. С Python способ, которым они решили справиться с этим, состоит в том, чтобы люди могли подключиться к этим функциям на ранней стадии, чтобы вы могли медленно переходить к своему коду.

С http://python.org/doc/2.5.2/ref/future.html

Будущее заявление является директивой компилятор, который конкретный модуль должны быть скомпилированы с использованием синтаксиса или семантика, которая будет доступна в указан будущий выпуск Python. Будущее заявление предназначено для облегчить переход на будущие версии Python, который вводит несовместимые изменения в язык. Это позволяет использовать из новых функций на модуль основа перед выпуском, в котором функция становится стандартной.

На самом деле вы можете проверять фьючерсы, чтобы получать информацию при первой поддержке, когда импорт больше не нужен и т. Д.

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)
>>>

Лично я интенсивно использую with_statement в Python 2.5 уже более года, и у меня не было проблем. Я также прозрачно запускаю этот код с Python 2.6. Есть несколько странных угловых случаев, над которыми они работали при очистке языка, в основном связанных с чистым и корректным сжатием, вложенным в операторы.

...