avec la déclaration - backport pour Python 2.5
-
20-09-2019 - |
Question
Je voudrais utiliser la déclaration de with
en Python 2.5 dans un code de production. Il a été backported, dois-je attendre à des problèmes (par exemple avec la disponibilité / compatibilité sur d'autres machines / etc)?
Est-ce code
from __future__ import with_statement
compatible avec Python 2.6?
La solution
with_statement n'a pas été backportées mais mis en œuvre en Python 2.5. L'ajout de nouveaux mots-clés ou la syntaxe peut briser les applications existantes. Avec Python la façon dont ils ont décidé de gérer cela est de permettre aux gens d'opt-in à ces fonctions au début afin que vous puissiez passer lentement votre code sur.
De http://python.org/doc/2.5.2/ ref / future.html
Une déclaration future est une directive le compilateur qu'un module particulier doit être compilé en utilisant la syntaxe ou sémantique qui seront disponibles dans un future version de Python spécifiée. La déclaration future vise à faciliter la migration vers les versions futures de Python qui introduisent incompatibles des modifications à la langue. Il permet d'utiliser des nouvelles fonctionnalités sur un par module base avant la libération dans laquelle la fonction devient standard.
Vous pouvez réellement inspecter des contrats à terme pour obtenir des informations sur lors de la première prise en charge, lorsque l'importation n'est plus nécessaire, 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)
>>>
Je suis personnellement très en utilisant le with_statement en Python 2.5 pour plus d'un an et n'ont pas eu des problèmes. J'ai aussi exécuté de manière transparente ce code avec Python 2.6. Il y a quelques cas d'angle bizarre, ils ont travaillé au nettoyage dans la langue, principalement liés à compacter proprement et correctement imbriquées avec les états.
Autres conseils
Oui, cette déclaration est un non-opération en Python 2.6, vous pouvez donc librement l'utiliser pour faire with
un mot-clé dans votre code de 2,5 ainsi, sans affecter le fonctionnement de votre code 2.6. Ceci est en fait la conception générale de l'intention « d'importer du futur » en Python!
Vous pouvez appeler cela en Python 2.6 et 3.0 / 1 sans problème (il y a là une no-op).