[PYTHON] __future__ Modul und future_builtins Modul

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.

Um genau zu sein, unterscheidet es sich vom Datentyp, aber es wird in Python nicht empfohlen, das Verhalten zu ändern, indem der Datentyp für diese Art von Objekt betrachtet wird, daher werde ich ihn zunächst nicht berücksichtigen.

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

__future__ Modul und future_builtins Modul
Python-Debug- und Testmodul
Zusammenarbeit zwischen Python-Modul und API
[Python] Über Executor und zukünftige Klassen
Python 3-Socket-Modul und Socket-Kommunikationsfluss
Warteschlangen- und Python-Implementierungsmodul "deque"
Koexistenz von Flask-Protokollierung und anderer Modulprotokollierung
Modulimport und Ausnahmebehandlung in Python