с инструкцией - backport для Python 2.5
-
20-09-2019 - |
Вопрос
Я бы хотел использовать with
оператор в Python 2.5 в каком-то производственном коде.Это было перенесено обратно, должен ли я ожидать каких-либо проблем (напримерс доступностью / совместимостью на других машинах / и т.д.)?
Является ли этот код
from __future__ import with_statement
совместим с Python 2.6?
Решение
with_statement не был перенесен обратно, но реализован в Python 2.5.Добавление новых ключевых слов или синтаксиса может привести к сбою существующих приложений.С Python они решили справиться с этим так, чтобы позволить людям подписываться на эти функции на ранней стадии, чтобы вы могли постепенно переделывать свой код.
От http://python.org/doc/2.5.2/ref/future.html
Оператор future - это указание компилятору на то, что конкретный модуль должен быть скомпилирован с использованием синтаксиса или семантики, которые будут доступны в указанной будущей версии Python.Инструкция future предназначена для облегчения перехода на будущие версии 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.Есть несколько странных угловых случаев, над устранением которых они работали в языке, в основном связанных с чистым и корректным уплотнением вложенных операторов with.
Другие советы
Да, этот оператор не является операцией в Python 2.6, поэтому вы можете свободно использовать его для создания with
ключевое слово также в вашем коде 2.5, не влияя на работу вашего кода в 2.6.На самом деле это общее намерение дизайна "импортировать из будущего" в Python!
Вы можете вызвать это в Python 2.6 и 3.0 / 1 без проблем (там это не работает).