In Python 2.6 oder höher können Sie das Verhalten einiger Funktionen und Anweisungen in das Verhalten des Python 3-Systems ändern, indem Sie den folgenden Code einfügen.
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
Beschränkt auf Python 2.6 oder höher 2 (2.6, 2.7), kann auch Folgendes verwendet werden.
from future_builtins import ascii, filter, hex, map, oct, zip
future_builtins
existiert im Gegensatz zu __future__
in der Python 3-Serie nicht
Wenn beide Systeme unterstützt werden, muss die Version vor dem Import überprüft oder in try / exception eingeschlossen werden.
Einzelheiten zu den einzelnen Modulen finden Sie in den folgenden Dokumenten.
Die Situation ist für Python 2.7 dieselbe und Sie können denselben Code wie oben verwenden. Python 2.6 ist in diesem Kapitel hauptsächlich enthalten, weil Python 2.6 in den nächsten Jahren unter RHEL / CentOS 6 überleben kann (ich verstehe). Zusammenfassend gibt es keine signifikanten Unterschiede im Verhalten von "future" und "future_builtins" zwischen Python 2.6 und Python 2.7.
In der Regel sollte Python 2.6 nicht von Personen verwendet werden, die die Python-Laufzeit auf eine Weise wie "pyenv" auswählen dürfen. Wenn Sie die Laufzeit frei wählen können, ist es besser, darüber nachzudenken, Python 2.7, dh das gesamte Python 2-System, nicht zu verwenden. Es ist jedoch weiterhin möglich, dass die Bibliothek, die Sie verwenden möchten (oder die Python-Laufzeit), an das Python 2-System gebunden ist, da es nur das 2-System unterstützt.
__future__
ist ein relativ altes Modul, das in Python 2.1 eingeführt wurde und verwendet wurde, wenn Sie einen Teil des Verhaltens der neuen Version in der alten Version von Python erfassen möchten. Heutzutage wird oft erwähnt, dass das Verhalten von Python 2 und 3 näher gebracht werden soll, aber es existiert nicht unbedingt für 3 Serien.
Einige Funktionen von __future__
sind in Python 2.6 nicht sinnvoll, und obwohl sie harmlos sind, können sie verwirrend sein. Die Erklärung in zukünftige Anweisung lautet wie folgt.
Die Funktionen, die Python 2.6 erkennt, sind unicode_literals, print_function, absolute_import, Division, Generatoren, nested_scopes, with_statement. Generatoren, with_statement, nested_scopes sind redundant, da sie in Python 2.6 und höher immer gültig sind.
future_builtins
ist ein Modul zur Bereitstellung einer Funktion, die in Python 2.x vorhanden ist, aber nicht zum integrierten Namespace von Python 2.x hinzugefügt werden kann, da sie sich in Python 3 anders verhält. 6 Art der Funktion ist definiert. Eingeführt in Python 2.6.
Wie oben erwähnt, handelt es sich um ein Modul, das in der Python 3-Serie nicht vorhanden ist. Wenn Sie also versuchen, es in der 3-Serie zu verwenden, handelt es sich um einen Fehler, anstatt ignoriert zu werden. Es scheint, dass beim Codieren sowohl für das 2. als auch für das 3. System einige Vorsicht geboten ist.
Jede von future_builtins
importierte Funktion verhält sich ähnlich wie die entsprechenden integrierten Funktionen der Python 3-Serie, einige verhalten sich jedoch anders. Wir können nicht davon ausgehen, dass sie sich genau gleich verhalten.
Normalerweise ist das Verhalten, wenn das erste Argument von "map ()" "None" ist, unterschiedlich.
Python 2.7.12 (default, Jul 20 2016, 12:19:03)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from future_builtins import map
>>> list(map(None, [1, 2, 3]))
[(1,), (2,), (3,)]
Die Substanz von "future_builtins.map" in Python 2.7 heißt "itertools.imap ()".
Wie Sie in Dokumentation sehen können, hat diese Funktion ein eindeutiges Verhalten, wenn das erste Argument function`` None
ist. Gibt es.
Wenn die Funktion Keine ist, gibt imap () ein Tupel von Argumenten zurück.
Die Funktion map ()
der Python 3-Reihe weist dieses Verhalten nicht auf (Referenz).
Wenn dem ersten Argument function
None zugewiesen wird, tritt in der Python3-Serie ein Fehler auf.
Python 3.5.2 (default, Jul 29 2016, 11:13:25)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> list(map(None, [1, 2, 3]))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable
Recommended Posts