Ich kann nicht einfach zu Python3 wechseln, also lassen Sie uns über 2-3 Kompatibilität nachdenken

Es ist an der Zeit, darüber zu sprechen, was mit der Python 3-Migration zu tun ist, also habe ich ein wenig nachgeforscht.

Python2-Unterstützung bis 2020

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

Migration oder Kompatibilität

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.

Im Falle einer Migration

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

Kompatibilität beibehalten

Folgendes können Sie tun, um die Kompatibilität aufrechtzuerhalten.

Zukunft mit 3er Notation in 2er Reihe

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.

An erster Stelle

Es gibt 2-3 kompatible Spickzettel! http://python-future.org/compatible_idioms.html

Ist der Übergang einfach?

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

Das Gute an Python 3

Die Migration nimmt viel Zeit in Anspruch, aber Python3 hat einige gute Eigenschaften.

Tipp Hinweis

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.

Bestelltes Wörterbuch

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

Ich kann nicht einfach zu Python3 wechseln, also lassen Sie uns über 2-3 Kompatibilität nachdenken
Ich möchte Timeout einfach in Python implementieren
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Lassen Sie uns Python Janome einfach verwenden
[Python] Ich habe versucht, eine stabile Sortierung zu implementieren
Ich habe versucht, Gesichtsmarkierungen mit Python und Dlib leicht zu erkennen
Ich habe versucht, Python zu berühren (Installation)
Lassen Sie uns Cython und Numba leicht bewegen
pyenv-vertualenv installiert die Python3-Serie nicht gut
Ich kann mich nicht an reguläre Python-Ausdrücke erinnern
[Einführung in Python] Verwenden wir Pandas
Scikit-learn kann nicht in Python installiert werden
[Einführung in Python] Verwenden wir Pandas
Mit Python 3 einfach auf Twitter posten
Ich möchte mit Python debuggen
[Einführung in Python] Verwenden wir Pandas
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, die Behandlung von Python-Ausnahmen zusammenzufassen
Ich habe versucht, PLSA in Python zu implementieren
Ich habe versucht, Permutation in Python zu implementieren
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (4)
Ich habe Python 3.5.1 installiert, um maschinelles Lernen zu studieren
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (2)
Ich habe versucht, PLSA in Python 2 zu implementieren
Python3-Standardeingabe habe ich versucht zusammenzufassen
Ich möchte ein Glas aus Python verwenden
Ich wollte ABC160 mit Python lösen
Ich möchte eine Python-Umgebung erstellen
[Einführung in Python] Verwenden wir foreach mit Python
Ich kann Python-Skripte in Eclipse nicht debuggen
Ich möchte Protokolle mit Python analysieren
Ich möchte mit aws mit Python spielen
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (5)
Ich habe versucht, ADALINE in Python zu implementieren
Ich wollte ABC159 mit Python lösen
Ich habe versucht, PPO in Python zu implementieren
[Python] Ich habe versucht, TF-IDF stetig zu berechnen
Ich habe versucht, Python zu berühren (grundlegende Syntax)
Was ich süchtig nach Python Autorun war
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (3)
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (1)
Ich wollte ABC172 mit Python lösen
Tool zum Verschieben von Verzeichnissen in das Python-Paket (pycd)
Was ich getan habe, um Python-Speicher zu speichern
Warum kann ich matplotlib nicht mit Python installieren? !!
Ich habe versucht, eine Klasse zu erstellen, mit der Json in Python problemlos serialisiert werden kann
Ich möchte Google Mail mit Python senden, kann dies jedoch aufgrund eines Fehlers nicht
Ich habe versucht zu erklären, wozu der Python-Generator so einfach wie möglich ist.
Ich habe versucht, die Tweets von JAWS DAYS 2017 mit Python + ELK einfach zu visualisieren
Ich habe versucht, mit Selenium + Python einfach ein vollautomatisches Anwesenheitssystem zu erstellen
Ich konnte AWS-Batch mit Python, Moto verspotten, also werde ich es verlassen