Pergunta

Eu gostaria de usar with Declaração no Python 2.5 em algum código de produção. Foi backportd, devo esperar algum problema (por exemplo, com disponibilidade/compatibilidade em outras máquinas/etc)?

Este código é

from __future__ import with_statement

Compatível com Python 2.6?

Foi útil?

Solução

With_statement não foi portado de volta, mas implementado no Python 2.5. Adicionar novas palavras -chave ou sintaxe pode quebrar aplicativos existentes. Com o Python, a maneira como eles decidiram lidar com isso é permitir que as pessoas optem por esses recursos mais cedo, para que você possa fazer a transição lentamente do seu código.

A partir de http://python.org/doc/2.5.2/ref/future.html

Uma declaração futura é uma diretiva ao compilador de que um módulo específico deve ser compilado usando sintaxe ou semântica que estará disponível em uma versão futura especificada do Python. A declaração futura visa aliviar a migração para versões futuras do Python que introduzem alterações incompatíveis no idioma. Ele permite o uso dos novos recursos por módulo antes da versão em que o recurso se torna padrão.

Na verdade, você pode inspecionar os futuros para obter informações quando suportadas, quando a importação não é mais necessária, 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)
>>>

Pessoalmente, tenho usado fortemente o With_statement no Python 2.5 há mais de um ano e não tive problemas. Eu também executei transparentemente esse código com o Python 2.6. Existem alguns casos de canto estranhos em que eles trabalharam na limpeza no idioma, principalmente relacionados à compactação de maneira limpa e correta aninhada com declarações.

Outras dicas

Sim, essa afirmação é uma operação no Python 2.6, para que você possa usá-la livremente para fazer with Uma palavra -chave também no seu código 2.5, sem afetar a operação do seu código em 2.6. Esta é de fato a intenção geral de design de "importar do futuro" em Python!

Você pode chamar isso de Python 2.6 e 3.0/1 sem problemas (é um não-op lá).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top