Вопрос

Я бы хотел использовать 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 без проблем (там это не работает).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top