con la declaración - backport para Python 2.5
-
20-09-2019 - |
Pregunta
Me gustaría utilizar comunicado with
en Python 2.5 en algún código de producción. Fue portado, debo esperar algún problema (por ejemplo, con disponibilidad / compatibilidad en otras máquinas / etc)?
¿Es este código
from __future__ import with_statement
compatible con Python 2.6?
Solución
with_statement no se volvió a portado pero implementado en Python 2.5. La adición de nuevas palabras clave o sintaxis puede romper las aplicaciones existentes. Con Python la forma en que decidió manejar esto es permitir que la gente opt-in a las características antes para que pueda transición lentamente sobre su código.
http://python.org/doc/2.5.2/ ref / future.html
Una declaración de futuro es una directiva para el compilador que un módulo particular debe ser compilado usando la sintaxis o semántica que estarán disponibles en una especificada versión futura de Python. La declaración futuro se pretende facilitar la migración a versiones futuras de Python que introducir incompatibles cambios en el lenguaje. Se permite el uso de las nuevas características en un módulo por cada base antes de la liberación en la que la característica se convierte en norma.
En realidad se puede inspeccionar los futuros para obtener información sobre cuándo apoyado en primer lugar, cuando la importación no se necesita más, etc.
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)
>>>
Yo personalmente he estado en gran medida usando el with_statement en Python 2.5 para más de un año y no he tenido problemas. También ejecuta de forma transparente que el código con Python 2.6. Hay algunos casos de esquina extraños que han trabajado en la limpieza en el lenguaje, en su mayoría relacionados con la forma limpia y correcta compactación anidado con las declaraciones.
Otros consejos
Sí, esa declaración es un no-operación en Python 2.6, por lo que se puede utilizar libremente para hacer with
una palabra clave en el código 2.5 así, sin afectar la operación de su código en 2.6. Esta es, de hecho, la intención del diseño general de "importación desde el futuro" en Python!
Puede llamar a esto en Python 2.6 y 3.0 / 1 sin problemas (es un no-op allí).