mit Aussage - Backport für Python 2.5
-
20-09-2019 - |
Frage
Ich möchte with
Anweisung in Python 2.5 in einigen Produktionscode verwenden. Es wurde zurückportiert, soll ich keine Probleme erwarten (zum Beispiel mit der Verfügbarkeit / Kompatibilität zu anderen Maschinen / etc)?
Ist dieser Code
from __future__ import with_statement
kompatibel mit Python 2.6?
Lösung
with_statement wurde nicht zurück portiert aber in Python 2.5 implementiert. Hinzufügen neuer Keywords oder Syntax können bestehende Anwendungen brechen. Mit Python die Art und Weise entschieden sie sich, dies zu umgehen ist es, Menschen zu ermöglichen, Opt-in denen Funktionen früh, so können Sie sich langsam über den Code übergehen.
http://python.org/doc/2.5.2/ ref / future.html
Eine zukünftige Anweisung ist eine Richtlinie der Compiler, dass ein bestimmtes Modul sollte mit Syntax kompiliert werden oder Semantik, die in einem zur Verfügung stehen wird spezifizierten zukünftige Version von Python. Die Zukunft Aussage soll erleichtern die Migration zu zukünftigen Versionen von Python, die unvereinbar einführen Änderungen an der Sprache. Es ermöglicht den Einsatz das neuen Features auf einem Pro-Modul Basis vor der Veröffentlichung, in dem die Funktion wird zum Standard.
Sie können tatsächlich Futures inspizieren Informationen zu erhalten, wenn zunächst unterstützt, wenn der Import nicht mehr benötigt wird, 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)
>>>
Ich habe persönlich gewesen stark die with_statement in Python 2.5 für mehr als ein Jahr mit und haben keine Probleme hatte. Ich betreibe auch transparent, dass Code mit Python 2.6. Es gibt einige seltsame Ecke Fälle, die sie bei Reinigung in der Sprache gearbeitet haben, vor allem im Zusammenhang mit sauber und korrekt mit Anweisungen verschachtelt Kompaktierung.
Andere Tipps
Ja, ist diese Aussage eine No-Operation in Python 2.6, so dass Sie frei sie verwenden können, als auch with
ein Schlüsselwort in Ihrem 2.5-Code zu machen, ohne in 2.6 Code des Betrieb zu beeinträchtigen. Dies ist in der Tat die allgemeine Design Absicht, in Python „aus der Zukunft zu importieren“!
Sie können dies nennen in Python 2.6 und 3.0 / 1 ohne Probleme (es ist ein no-op dort).