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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top