Es ist an der Zeit, darüber zu sprechen, was mit der Python 3-Migration zu tun ist, also habe ich ein wenig nachgeforscht.
Die Unterstützung für die Python 2-Serie wurde offiziell bis 2020 angekündigt. (Es scheint, dass es keine 2.8 gibt) Unabhängig davon, ob Ihr aktuelles Python-Produkt bis 2020 betriebsbereit ist Es ist an der Zeit, eine Migration auf Python3 in Betracht zu ziehen.
Zunächst eine kleine Aufzählung, wie sich dies ändern wird
Python2.X | Python3.X | Funktioniert 3 System mit 2 Systemnotation? |
---|---|---|
print 'xxx' | print('xxx') | × |
xrange(1, 10) | range(1, 10) | × |
except Error, V | except Error as V | × |
Bereich scheint das Verhalten von xrange in 3 Serien zu sein.
Dies bedeutet nicht, dass sich der Übergang vom 2. zum 3. System so stark ändern wird. Es ist nur eine geringfügige Änderung der Syntax. (Überprüfen Sie, ob die externe Bibliothek dies unterstützt.)
Selbst wenn der Support nicht verfügbar ist, muss er bis zu diesem Zeitpunkt betrieben werden, und es ist ineffizient, ihn für das 2. und 3. System separat zu implementieren. Daher ist es nicht möglich, das 2. System abzuschneiden und einen Übergang vorzunehmen, und es ist realistisch, einen Weg zu finden, um mit dem 3. System koexistieren zu können. Glücklicherweise können in Python die 2. und 3. Serie zusammenleben.
Da es eine große Sache ist, ist das Migrationstool auch 2to3 2to3 ist als Stapelkonvertierungsbibliothek verfügbar. Es ist in Python integriert, sodass Sie es nicht extern installieren müssen.
Es scheint, dass die Syntax und der Import entsprechend der Python 3-Systemsyntax angeordnet werden. 2to3 hat nicht die Funktion, von 3 Serien in 2 Serien zu konvertieren. Es gibt aber auch eine Drittanbieter-Bibliothek namens 3to2. (Bist du da?) https://pypi.python.org/pypi/3to2
Folgendes können Sie tun, um die Kompatibilität aufrechtzuerhalten.
Ausführungsumgebung 2 System kann für 3 Systemnotation verwendet werden. http://docs.python.jp/2/library/future.html
Sie können mit print () schreiben.
from __future__ import print_function
print ('hoge')
Das Schreiben von Unicode als u'hogehoge 'macht u überflüssig.
>>> from __future__ import unicode_literals
>>> 'japanisch'
u'\u65e5\u672c\u8a9e'
>>> u'japanisch'
u'\u65e5\u672c\u8a9e'
Der Import hat absolut Priorität (schwer zu erklären)
from __future__ import absolute_import
Es gibt drei oder vier weitere, die jedoch weggelassen werden, da sie für Python 2.6 und höher nicht so relevant sind.
six Eine kompatible Bibliothek ist ebenfalls verfügbar. Es ist sechs. 2 * 3 = 6 und es scheint sechs zu sein. Es ist leicht zu merken. Dies ist eine externe Bibliothek. http://hhsprings.bitbucket.org/docs/translations/python/six-doc-ja/
pip install six
Um es zu verwenden, importieren Sie es einfach und verwenden Sie es für die inkompatiblen Teile der 2. und 3. Serie. Es wird zur Laufzeit intern gemäß der Python-Version verwendet.
Zum Beispiel bei Zeichenketten
Python2 | Python3 | six |
---|---|---|
basestring | str | string_types |
unicode | str | text_type |
str | bytes | binary_type |
iterable (collection) Das iterierbare System sieht ähnlich aus. Wenn Sie sich also das Diktat ansehen, das Sie möglicherweise häufig verwenden,
Python2 | Python3 | six |
---|---|---|
iterkeys | keys | iterkeys |
itervalues | values | itervalues |
iteritems | items | iteritems |
Die Notation ähnelt dem 2. System.
Eine gute Anzahl von Einbauten kann von sechs absorbiert werden.
Es gibt 2-3 kompatible Spickzettel! http://python-future.org/compatible_idioms.html
Ich habe festgestellt, dass es kompatibel ist, aber das Finden und Reparieren der entsprechenden Teile nacheinander ist eine lächerliche Anstrengung. Ich möchte eine Stapelkonvertierungsbibliothek. Gibt es?
war! https://github.com/python-modernize/python-modernize Es scheint, dass es auch mit sechs konvertiert wird, also scheint es ziemlich vielversprechend. Als ich ein wenig in die Quelle schaute, gab es sechs und zukünftige, also denke ich, dass sie in ein schönes Gefühl umgewandelt werden! ?? Ich würde es gerne zu einem anderen Zeitpunkt versuchen. (Diesmal hatte ich nicht genug Zeit. Es tut mir wirklich leid.) (Wenn Sie es versucht haben, ist dies Ihre Chance, zuerst einen Artikel zu schreiben!)
Die Migration nimmt viel Zeit in Anspruch, aber Python3 hat einige gute Eigenschaften.
http://docs.python.jp/3/library/typing.html Sie können den Typ beim Definieren einer Funktion oder Klasse angeben.
def greeting(name: str) -> str:
return 'Hello ' + name
Im Gegensatz zur Kompilierungssprache kann sie zur Laufzeit nicht überprüft werden. Es ist sehr wichtig, den Argumenttyp sofort während der Entwicklung zu kennen, um Fehler zu vermeiden.
Es ist ein Wörterbuch, das in der Reihenfolge abgerufen werden kann, in der es eingegeben wurde. Früher erinnere ich mich, dass ich die Sortierreihenfolge in den Wert gesetzt und dann sortiert habe, sodass es nützlich zu sein scheint.
>>> from collections import OrderedDict
>>> od = OrderedDict()
>>> od['a'] = 1
>>> od['b'] = 2
>>> od['c'] = 3
>>> for k, v in od.items():
... print(k, v)
...
a 1
b 2
c 3
>>> od2 = OrderedDict()
>>> od2['c'] = 3
>>> od2['b'] = 2
>>> od2['a'] = 1
>>> for k, v in od2.items():
... print(k, v)
...
c 3
b 2
a 1
Ab Python 3.5 scheint es noch schneller zu sein!
Darüber hinaus scheinen asynchrone Generatoren in Python 3.6 implementiert zu sein, und der Traum wird sich ausbreiten. Lassen Sie uns Python3 für neue Funktionen sowie das negative Motiv der Support-Frist unterstützen!
Recommended Posts