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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top