Modifikation von Python 2.x.x mit Python 3.x.x & Methode zur Umwandlung von Python 2.x.x in Python 3.x.x

Schriftsteller:Kleine Träume, Erstellt: 2016-10-09 12:36:49, Aktualisiert: 2017-10-11 10:18:05

Unterschiede zwischen Python 2 und Python 3

Nahezu alle Python-2-Programme erfordern einige Änderungen, um in der Python-3-Umgebung ordnungsgemäß zu laufen. Um den Umwandlungsprozess zu vereinfachen, kommt Python 3 mit einem Utility-Skript namens 2to3, das Ihre Python-2-Source-Dateien als Input verwendet und dann automatisch in die Form von Python-3 konvertiert.

  • Print-Sätze

In Python 2 ist print ein Satz. Was auch immer du ausführen willst, kannst du einfach hinter das Print-Schlüsselwort setzen. In Python 3 ist print eine Funktion. Wie bei allen anderen Funktionen benötigt print, dass du ihm das, was du ausführen willst, als Parameter übergibst.

Anmerkungen Python 2 Python 3
Druck Ausdrucken
Druck 1 Druck ((1)
Druck 1,2 Druck ((1,2)
Druck 1, 2, print ((1,2,end= ")
Ausdrucken >>sys.stderr,1,2,3 Print ((1,2,3, Datei=sys.stderr)

1, Um eine leere Zeile auszuführen, muss print ohne Parameter aufgerufen werden ((() ). 2. Um einen separaten Wert auszugeben, muss dieser Wert als ein Print-Parameter verwendet werden. 3, zwei Werte, die von einem Raum getrennt sind, können mit den beiden Parametern print (() genannt werden. 4. Dieses Beispiel bietet einige Tricks. In Python 2 wird das Ergebnis durch ein Komma als Ende der Print-Sprache getrennt und dann ohne Carriage-Return durch einen Trailing-Space ausgeführt. In Python 3 kann der gleiche Effekt erreicht werden, indem end = als Schlüsselwortparameter an print weitergegeben wird. 5. In Python 2 können Sie die Ausgabe auf einen Pfeiler umleiten, indem Sie die >pipe_name-Symmetrie verwenden, z. B. sys.stderr. In Python 3 können Sie die gleiche Funktion ausführen, indem Sie den Pfeiler als den Wert der Keyword-Parameter-Datei an print))) weiterleiten. Der Standardwert der Parameter-Datei ist std.stdout, so dass die Neuausgabe des Wertes print))) in einen anderen Pfeiler ausführen wird.

  • Unicode-Streifen

In Python 2 gibt es zwei Stringtypen:Unicode-StreifenundNicht-Unicode-StreifenIn Python 3 gibt es nur einen Typ:Unicode-Strings

Anmerkungen Python 2 Python 3
Ich bin ein Papaja-Whip. Papaya Whip
Das ist nicht wahr. RPapayaWhip\foo

Die Unicode-String in Python 2 ist in Python 3 eine normale String, da die String in Python 3 immer in Unicode-Form ist. Die Unicode-Naturstring ((raw string) ((Python wird diese String nicht automatisch umwandeln, um eine Querversion zu erzeugen)) wurde auch als normale String ersetzt, da in Python 3 alle ursprünglichen Strings in Unicode codiert sind.

  • Unicode für globale Funktionen

In Python 2 gibt es zwei globale Funktionen, mit denen Objekte in Strings gezwungen werden können: Unicode (() umsetzt Objekte in Unicode-Strechs und str (() umsetzt Objekte in nicht-Unicode-Strechs. In Python 3 gibt es nur einen String-Typ, den Unicode-String, so dass die Str (() -Funktion alle Funktionen ausführt.Die Funktion unicode (() existiert in Python 3 nicht mehr.)

Anmerkungen Python 2 Python 3
Unicode (Jedes) Ich habe keine Ahnung.
  • Lang und ganz

In Python 2 gibt es für die nicht-floating-point-Typen int und long. Der Maximalwert des Typs int darf nicht größer sein als sys.maxint, und dieser Maximalwert ist plattformsbezogen. Man kann einen langen Integer definieren, indem man ein L am Ende der Zahlen anfügt. Offensichtlich ist er größer als der Zahlenbereich, den der Typ int darstellt. In Python 3 gibt es nur einen Integertyp int, der in den meisten Fällen wie der Integer in Python 2 ist.

Weiterlesen: PEP 237: Einheitliche Längen- und Gesamtformen.

Anmerkungen Python 2 Python 3
x = 1000000000000L x = 1000000000000
x = 0xFFFFFFFFFFFF x = 0xFFFFFFFF
lang ((x) Int (x)
Typ ((x) ist lang Typ ((x) ist int
istinstanz ((x,lang) istinstanz ((x,int)

In Python 2 wird die Dezimalzahl in Python 3 durch die Dezimalzahl ersetzt. Die sechzehnstellige Längeninteger in Python 2 werden in Python 3 durch die sechzehnstellige gewöhnliche ganze Zahl ersetzt. In Python 3 gibt es keine langfristigen Formen mehr.Auch die natürliche long))) Funktion ist nicht mehr vorhanden. Um eine Variable in einen Integer zu konvertieren, kann die Int))) Funktion verwendet werden.Das ist nicht wahr. Überprüft, ob eine Variable ein Integer ist, erhält ihren Datentyp und vergleicht ihn mit einem Int-Typ (nicht lang). Sie können auch die Instanz (() Funktion verwenden, um den Datentyp zu überprüfen; nochmals betonen wir, dass man den Integertyp mit int, nicht mit long, überprüft.

  • Vergleiche die Operatoren <>

Python 2 unterstützt <> als Synonym für!=.

Anmerkungen Python 2 Python 3
wenn x <> y: wenn x!= y:
wenn x <> y<> z: wenn x!= y!= z:

1. Einfach vergleichen. 2, Vergleich zwischen drei relativ komplexen Werten.

  • Methode der Wörterbuchklasse has_key ((()

In Python 2 wird die has_key (() Methode für die has_key (() des Wörterbuchobjekts verwendet, um zu testen, ob das Wörterbuch einen bestimmten Schlüssel enthält ((key)). Python 3 unterstützt diese Methode nicht mehr.inDie Operatoren.

Anmerkungen Python 2 Python 3
Das ist ein Wörterbuch. Hat einen Schlüssel. PapayaWhip im Wörterbuch
a_Wörterbuch.hat_Schlüssel (x) oder a_Wörterbuch.hat_Schlüssel (y) x in einem Wörterbuch oder y in einem Wörterbuch
a_dictionary.has_key (x oder y) (x oder y) in einem Wörterbuch
a_Wörterbuch.hat_key ((x + y) (x + y) in einem Wörterbuch
x + a_dictionary.has_key(y) x + (y im a_Wörterbuch)

1, die einfachste Form. 2, die Vorrangszahl des Operators or ist niedriger als die des Operators in, so dass hier keine Klammern hinzugefügt werden müssen. 3. Auf der anderen Seite, aus den gleichen Gründen, dass die Priorität von or niedriger ist als in, müssen hier Klammern hinzugefügt werden. 4. Die Vorrangszahl des Operators in ist niedriger als die des Operators +, so dass diese Form im Code technisch keine Klammern benötigt, aber 2to3 wird hinzugefügt. 5. Diese Form muss Klammern benötigen, da in eine niedrigere Priorität hat als +//.

  • Methode zur Rückgabe der Wörterbuchklasse

In Python 2 sind die Rückgabewerte vieler Lexikamethoden Listen. Die am häufigsten verwendeten Methoden sind Keys, Items und Values. In Python 3 werden die Rückgabewerte aller Methoden in eine dynamische Ansicht umgewandelt. In einigen kontextbezogenen Umgebungen hat diese Änderung keinen Einfluss.

Anmerkungen Python 2 Python 3
a_Wörterbuch.Schlüssel() Liste ((a_dictionary.keys())
a_dictionary.items() Liste ((a_dictionary.items())
a_dictionary.iterkeys() Ich habe das Wort "Wörterbuch" benutzt.
[i für iin a_dictionary.iterkeys() ] [i für iin a_dictionary.keys() ]
Min(a_dictionary.keys()) Keine Veränderung

Die Funktion 1, die die Rückgabe von keys ((() in eine statische Liste umwandelt, kann aus Sicherheitsgründen 2to3 fehlerhaft machen. Derartiger Code funktioniert, ist aber weniger effizient für die Verwendung von Ansichten. Sie sollten den umgewandelten Code überprüfen, um zu sehen, ob eine Liste notwendig ist, vielleicht kann die Ansicht die gleiche Arbeit tun. 2, das ist eine andere Sichtweise der Konvertierung der Methode "Über Items" in die Liste. 3. In Python 3 werden keine iterkeys mehr unterstützt. Wenn nötig, kann man mit iter den Rückgabewert von keys zu einem Iderator umwandeln. Die 4, 2to3 Methode kann erkennen, dass die iterkeys (() Methode in der Listeparalyse verwendet wird, und sie dann in die keys (() Methode in Python 3 umwandelt. 5, 2to3 kann auch erkennen, dass der Rückgabewert der Methode keys() sofort an eine andere Funktion weitergegeben wird, die die gesamte Reihe durchläuft, so dass es nicht notwendig ist, den Rückgabewert von keys() zuerst in eine Liste zu konvertieren. Im Gegenteil, die Min() Funktion wird gerne durch die Ansicht gehen. Dieser Prozess ist für min ((), max ((), sum ((), tuple ((), setlist ((), sorted ((), any (() und all (()) genauso wirksam.

  • Module, die umbenannt oder neu organisiert wurden

Von Python 2 bis Python 3 wurden einige Module der Standardlibrary umbenannt. Einige miteinander verbundene Module wurden zusammengefasst oder neu organisiert, um diese Verbindung logischer zu gestalten.

  • http In Python 3 werden mehrere zugehörige HTTP-Module zu einem einzelnen Paket zusammengefasst, das HTTP genannt wird.
Anmerkungen Python 2 Python 3
Import von httplib Import von http.client
Import-Cookie Import von http.cookies
Import von Cookielib Import von http.cookiejar
Importieren von CGIHttpServer Import von http.server

Das http.client Modul implementiert eine untergeordnete Bibliothek, mit der HTTP-Ressourcen angefordert und HTTP-Antworten analysiert werden können. Das http.cookies Modul bietet eine Python-ähnliche Schnittstelle, um Cookies abzurufen, die über den HTTP-Header Set-Cookie gesendet werden. Die gängigen Browser speichern Cookies in Form von Dateien auf der Festplatte, die mit dem Modul http.cookiejar verarbeitet werden können. http.server Module implementieren einen grundlegenden HTTP-Server

  • Urllib In Python 2 gibt es einige Module, die zum Analysieren, Codieren und Abrufen von URLs verwendet werden, aber diese Module überlappen sich wie eine Maus. In Python 3 werden diese Module umgebaut und zu einem einzelnen Paket, urllib, zusammengesetzt.
Anmerkungen Python 2 Python 3
Import von URLlib Import von urllib.request
urllib.parse,urllib.error
Import von Urllib2 Import von urllib.request
Import von URLparse Import von urllib.parse
Import des Robotparsers Import von urllib.robotparser
von urllib import FancyURLopener
von urllib import urlencode
von urllib.request import FancyURLopener
von urllib.parse import urlencode
von urllib2 import Anforderung
von urllib2 import HTTPError
von urllib.request import Anfrage
von urllib.error import HTTPError

Die urllib-Module in Python 2 verfügen bisher über eine Vielzahl von Funktionen, darunter urlopen, die für die Datenerfassung verwendet werden, und sind nützlich, um URLs in die Funktionen splittype, splithost und splituser zu unterteilen. In der neuen urllib-Packung sind diese Funktionen logischer organisiert. 2to3 wird die Aufrufe dieser Funktionen ändern, um die neuen Namensschemata anzupassen. In Python 3 wurden die früheren urllib2-Module in urllib-Packungen integriert. In urllib2 werden alle deine Lieblingsdaten in Python 3 integriert, z. B. die Build_opener-Methode, die Request-Objekte, den HTTPBasicAuthHandler und die Friends. Der urllib.parse Modul in Python 3 enthält alle Parse-Funktionen des ursprünglichen urlparse Moduls in Python 2. Der Modul urllib.robotparse analysiert die Robots.txt-Datei. Die FancyURLopener-Klasse, die HTTP-Weiterleitungen und anderen Statuscodes bearbeitet, ist im urllib.request-Modul in Python 3 noch gültig. Die Funktion "urlencode" wurde in urllib.parse übernommen. Die Request-Objekte sind in urllib.request noch gültig, aber Konstanten wie HTTPError wurden in urllib.error verschoben. Habe ich erwähnt, dass 2to3 auch Ihre Funktionsanrufe überschreibt? Zum Beispiel, wenn Sie in Ihrem Python 2-Code ein urllib-Modul importiert haben und die Funktion urllib.urlopen () aufrufen, um Daten zu erhalten, ändert 2to3 sowohl die Import-Anweisung als auch den Funktionsanruf.

Anmerkungen Python 2 Python 3
Import urllib print urllib.urlopen"http://diveintopython3.org/’) lesen)) Import von urllib.request, urllib.parse, urllib.error
print ((urllib.request.urlopen))"http://diveintopython3.org/’) lesen))
  • Dbm Alle DBM-Klone befinden sich nun in einem einzelnen Paket, dbm. Wenn Sie eine bestimmte Variante davon benötigen, wie z. B. GNUDBM, können Sie die entsprechenden Module in das dbm-Paket importieren.
Anmerkungen Python 2 Python 3
Einfuhr dbm Import dbm.ndbm
Import von GDBM Einfuhrdbm.gnu
Import von dbhash Import dbm.bsd
Importieren dumbdbm Importieren dbm.dumb
Importe von Waren und Dienstleistungen Einfuhr dbm
  • xmlrpc XML-RPC ist eine leichte Methode zur Durchführung von Remote-RPC-Aufrufen über den HTTP-Protokoll. Einige Implementierungsbücher für XML-RPC-Clients und XML-RPC-Server werden nun in einem eigenständigen Paket, xmlrpc, zusammengefasst.
Anmerkungen Python 2 Python 3
Import von xmlrpclib Import von xmlrpc.client
Import von DocXMLRPCServer
Import von SimpleXMLRPCServer
Import von xmlrpc.server
  • Weitere Module

Anmerkungen Python 2 Python 3
Versuch:
cStringIO als StringIO importieren
außer ImportError:
StringIO importieren
Einfuhr
Versuchen Sie:
cPickle als Pickle importieren
außer ImportFehler:
Pickle importieren
Importbeeren
Import _Gebaut Importe von Gebäuden
Import von copy_reg Import-Copyreg
Import-Warteschlange Importwarteschlange
SocketServer importieren Import Socketserver
Import von ConfigParser Import von Konfigurationsparser
Einfuhr repr Import reprlib
Importbefehle Importuntergang

1. In Python 2 wird normalerweise versucht, cStringIO als Alternative zu StringIO zu importieren, und wenn dies nicht gelingt, wird StringIO wieder importiert. 2. Im Python 2 ist die Implementierung der schnellsten Pickle-Implementierung eine ähnliche Methode wie oben. In Python 3 werden die Pickle-Module automatisch für Sie verarbeitet, also tun Sie das nicht mehr. 3. Der Builtins-Modul enthält globale Funktionen, Klassen und Konstanten, die in der gesamten Python-Sprache verwendet werden. Eine Neudefinition einer Funktion im Builtins-Modul bedeutet, dass diese globale Funktion überall neu definiert wird. 4. Das Copyreg Modul unterstützt die Pickle-Module für benutzerdefinierte C-Typen. 5. Das Queue-Modul realisiert eine Multi-Produzent-Multi-Consumer-Warteschlange. 6. Der Socketserver-Modul bietet eine allgemeine Grundklasse für die Implementierung verschiedener Socket-Server. 7. Das Modul "configparser" wird verwendet, um INI-style Profile zu analysieren. 8. Der Reprlib-Modul implementiert die eingebaute Funktion repr (), und fügt Kontrollen für die Länge der Stringdarstellung hinzu, die vor dem Abschneiden angegeben wird. 9. Subprocess-Module erlauben es Ihnen, Subprozesse zu erstellen, an ihre Pipelines zu verbinden und ihre Rückgabewerte zu erhalten.

  • Relativer Import innerhalb des Pakets

Ein Paket ist eine einzelne Einheit, die aus einer Gruppe von Modulen besteht. In Python 2 benutzt man Import foo oder From foo Import Bar, um Module in einem Paket miteinander zu verweisen.2解释器会先在当前目录里搜索foo.pyIn Python 3 ist der Prozess etwas anders. Python 3 sucht nicht zuerst in der aktuellen Path, sondern sucht direkt in der Python-Path. Wenn Sie ein Modul in einem Paket in ein anderes Modul importieren möchten, müssen Sie den relativen Weg der beiden Module eindeutig angeben.

Angenommen, Sie haben ein Paket mit mehreren Dateien im selben Verzeichnis:

Schartel/ Das ist eine sehr schöne Idee. - Ich weiß.Initialisierung.py Das ist eine sehr schöne Idee.+--Konstanten.py | +--mbcharsetprober.py | +--Universaldetector.py

Jetzt nehmen wir an, dass der UniversalDetector.py die gesamte Importkonstanten.py benötigt.,另外还需要导入mbcharsetprober.py的一个类。你会怎样做?

Anmerkungen Python 2 Python 3
Einfuhrkonstanten von.import Konstanten
von mbcharsetprober importieren MultiByteCharSetProber von.mbcharsetprober importieren MultiByteCharsetProber

1. Wenn Sie ein ganzes Modul von einem anderen Ort im Paket importieren möchten, verwenden Sie die neue.from-Import-Syntax.universaldetector.py) und Sie möchten die Dateien importierenconstants.py) zwischen den beiden Modulen. In diesem Beispiel sind die beiden Dokumente im selben Verzeichnis, daher wird ein einziger Satz verwendet. Sie können auch aus dem Elternverzeichnis ((from... import anothermodule) oder aus dem Unterverzeichnis importieren. 2. Um eine bestimmte Klasse oder Funktion direkt aus einem anderen Modul in den Namensraum Ihres Moduls zu importieren, fügen Sie den relativen Pfad an den Namen des Moduls an, den Sie importieren möchten, und entfernen Sie den letzten Slash. In diesem Fall befinden sich mbcharsetprober.py und universaltector.py im selben Verzeichnis, so dass der relative Pfadnamen eine Ziffer ist.

  • Die Methode des Iterators next ((()

In Python 2 hat der Iderator eine Methode "next" (), die verwendet wird, um den nächsten in der Reihe zurückzugeben. In Python 3 funktioniert das genauso, aber jetzt gibt es eine neue globale Funktion "next" (), die einen Iderator als Parameter verwendet.

Anmerkungen Python 2 Python 3
AnIterator.next() Nächste (Aniterator)
a_function_that_returns_an_iterator().next() next ((a_function_that_returns_an_iterator())
Klasse A:
def next ((self):
Pass
Klasse A:
Nächstes(selbst):
Klasse A:
def next ((selbst, x, y):
Pass
Keine Veränderung
next = 42
für einen_Iterator in einer_Sequenz_von_Iteratoren:
an_iterator.next()
next = 42
für einen_Iterator in einer_Sequenz_von_Iteratoren:
ein_Iterator._Nächstes()

1. Das einfachste Beispiel ist, dass man die next (() Methode eines Iderators nicht mehr aufruft, sondern nun den Iderator selbst als Parameter an die globale Funktion next (() weitergibt. 2. Wenn Sie eine Funktion haben, die einen Wert für einen Iterator zurückgibt, rufen Sie diese Funktion an und geben Sie die Ergebnisse als Parameter an die next() Funktion weiter. 3. Wenn man seine eigene Klasse voraussetzt und sie dann als Iderator benutzt, dann kann man in Python 3 eine spezielle Methode definieren.Nächstes(,) um zu realisieren. 4, wenn die definierte Klasse zufällig einen next ((() hat, der einen oder mehrere Parameter verwendet. 2to3 wird ihn bei der Ausführung nicht aktivieren. Diese Klasse kann nicht als Iterator verwendet werden, da ihre next ((() Methode Parameter enthält. 5. Das ist etwas kompliziert. Wenn du zufällig eine lokale Variable namens next hast, hat sie in Python 3 eine höhere Priorität als die globale Funktion next. In diesem Fall musst du eine spezielle Methode für den Iterator aufrufen.Nächstes() wird verwendet, um das nächste Element in der Sequenz zu erhalten. Oder Sie können den Code so umstrukturieren, dass diese lokale Variable nicht als next bezeichnet wird, aber 2to3 wird das nicht für Sie tun.

  • Globale Funktionsfilter

In Python 2 kehrt die Filter-Methode eine Liste zurück, die durch eine Funktion, die einen Wert von True oder False zurückgibt, für jedes Element in der Sequenz ermittelt wird. In Python 3 kehrt die Filter-Methode einen Iterator zurück, der keine Liste mehr ist.

Anmerkungen Python 2 Python 3
Filter (a_funktion, a_sequenz) Liste (Filter) (Funktion, Folge)
Liste (Filter) (Funktion, Folge) Keine Veränderung
Filter ((Nichts, a_sequenz) [i für in a_sequenz, wenn i]
für i im Filter ((None, a_sequence): Keine Veränderung
[i für ein Filter (a_function, a_sequence) ] Keine Veränderung

In der einfachsten Form wickelt 2to3 den Filter mit einer List-Funktion, die seine Parameter durchläuft und eine Liste zurückgibt. 2, wenn allerdings der Filter ((() -Aufruf bereits von List (() umhüllt wurde, wird 2to3 nicht mehr verarbeitet, da es in diesem Fall unwichtig ist, ob der zurückgegebene Filter ((() -Wert ein Iterator ist. 3, um mit der speziellen Syntax zu arbeiten, die als Filter (None,...) bezeichnet wird, wird dieser Aufruf von 2to3 synamisch gleichbedeutend in eine Listeparalyse umgewandelt. 4. Da die For-Lippe die gesamte Sequenz durchläuft, müssen keine weiteren Änderungen vorgenommen werden. 5, wie oben, keine Änderungen erforderlich, da die Liste durchläuft die gesamte Folge, und auch wenn der Filter ((() einen Iterator zurückkehrt, kann er normal funktionieren, wie der vorherige Filter ((() die Liste zurückkehrt.

  • Globale Funktion map

Wie bei der Änderung von filter (), gibt die map ()) Funktion nun einen Iterator zurück. In Python 2 gibt sie eine Liste zurück.

Anmerkungen Python 2 Python 3
- Ich bin nicht hier. - Ich bin hier. Liste, Karte, Funktion, Papaya Whip
Ich habe keine Karte, Papaya Whip. Liste ((PapayaWhip)
Die Daten sind in der Tabelle 1 aufgeführt. [x+1 für x im Bereich ((42) ]
für i in Map ((a_function, a_sequence): Keine Veränderung
[i für eine Karte (a_function,a_sequence) ] Keine Veränderung

1, ähnlich wie bei filter (), wird in der einfachsten Form 2to3 mit einer list ()) Funktion verpackt, um den map ()) Aufruf zu verwenden. 2、 für die spezielle map ((None,...) Syntax, ähnlich wie filter ((None,...) wird 2to3 in einen gleichwertigen Aufruf mit list (() umgewandelt. 3, wenn der erste Parameter von map ((() eine Lambda-Funktion ist, wird 2to3 gleichwertig in eine Listsortierung umgewandelt. 4. Für For-Läufe, die die gesamte Reihe durchlaufen, müssen keine Änderungen vorgenommen werden. 5. Auch hier ist keine Änderung notwendig, da die Liste durch die gesamte Folge analysiert wird, und auch wenn der zurückgegebene Wert von map ((() ein Iterator und nicht eine Liste ist, funktioniert es.

  • Die globale Funktion reduce

In Python 3 wurde die Funktion reduce ((() aus dem globalen Namensraum entfernt und wird nun im Fucntools-Modul platziert.

Anmerkungen Python 2 Python 3
Verringern (a, b, c) von Funktools Import reduzieren reduzieren (a, b, c)
  • Die globale Funktion apply (((

In Python 2 gibt es eine globale Funktion namens apply (), die eine Funktion f und eine Liste [a, b, c] als Parameter verwendet und den Wert f (a, b, c) zurückgibt. Sie können das auch tun, indem Sie diese Funktion direkt anrufen und ihr ein Sternzeichen vor der Liste hinzufügen. In Python 3 existiert die Funktion apply (a, b, c) nicht mehr.

Anmerkungen Python 2 Python 3
Anwendung (a_function, a_list_of_args) a_function ((*a_list_of_args)
Anwendung (a_function, a_list_of_args, a_dictionary_of_named_args) a_function ((*a_list_of_args,**a_dictionary_of_named_args)
Anwendung ((a_function, a_list_of_args+ z) a_function ((*a_list_of_args+ z)
Anwendung ((aModule.a_function, a_list_of_args) aModule.a_function(*a_list_of_args)

In der einfachsten Form kann man eine Funktion aufrufen, indem man vor der Parameterliste (wie [a, b, c]) ein Sternzeichen hinzufügt. 2. In Python 2 kann die Funktion apply (() eigentlich drei Parameter haben: eine Funktion, eine Parameterliste, ein Dictionary of named arguments. In Python 3 kannst du eine Sternzeichen vor der Parameterliste hinzufügen.), zwei Sternzeichen ((**) vor dem Wörterbuch-Namenparameter hinzugefügt werden, um den gleichen Effekt zu erzielen. 3. Der +-Operator wird hier als Funktion für eine Verknüpfungsliste verwendet und hat eine höhere Priorität als der Operator., so dass es nicht notwendig ist, zusätzliche Klammern um a_list_of_args + z hinzuzufügen. 4, 2to3 Skripte sind intelligent genug, um komplexe apply () Anrufe zu konvertieren, einschließlich der Anrufe von Import-Funktionen in Modulen.

  • Globale Funktion intern

In Python 2 können Sie die Funktion "intern" auf einer String beschränken, um die Leistungsoptimierung zu erreichen. In Python 3 wird die Funktion "intern" in das sys-Modul überführt.

Anmerkungen Python 2 Python 3
Das ist nicht der Fall. sys.intern (aString)
  • exec-Satz

So wie print in Python 3 zu einer Funktion wird, so wird auch die exec-Funktion verwendet. Die Funktion verwendet eine String mit beliebigen Python-Codes als Parameter und wird dann wie ein Ausführungsstatement oder ein Ausdruck ausgeführt.

Anmerkungen Python 2 Python 3
exec codeString - Das ist nicht richtig.
exec codeString in einem globalen Namensraum exec ((codeString, a_global_namespace)
exec codeString in a_global_namespace, a_local_namespace exec ((codeString, a_global_namespace,a_local_namespace)

1, in der einfachsten Form, weil exec ((() jetzt eine Funktion ist, anstatt ein Satz, wird 2to3 den Code in dieser Stringform mit Klammern umschließen. 2. Die exec-Anweisung in Python 2 kann einen Namenraum angeben, der in diesem privaten Raum aus globalen Objekten ausgeführt wird. Auch in Python 3 gibt es eine Funktion; Sie müssen diesen Namenraum lediglich als zweiten Parameter an die exec (() -Funktion weitergeben. 3. Noch erstaunlicher ist, dass die exec-Anweisung in Python 2 auch einen lokalen Namensraum (z. B. eine Variable, die in einer Funktion deklariert wird) angibt. In Python 3 ist die Funktion exec (z. B. eine Variable, die in einer Funktion deklariert wird) ebenfalls verfügbar.

  • Die execfile-Anweisung

Wie bei den vorherigen exec-Sätzen kann die execfile-Sprache in Python 2 wie bei Python-Code mit Strings ausgeführt werden. Im Gegensatz dazu verwendet exec Strings, während execfile Dateien verwendet. In Python 3 wurde die execfile-Sprache entfernt.

Anmerkungen Python 2 Python 3
execfile ((a_filename) exec(compile(open(a_filename).read(),a_filename,exec))
  • repr (unter Anführungszeichen)

In Python 2 gibt es eine Art, um eine Stringdarstellung eines beliebigen Objekts zu erhalten, indem man das Objekt in Gegenquoten wickelt (z.B.xDie spezielle Syntax der.// in Python 3 existiert diese Fähigkeit noch, aber man kann diese String nicht mehr mit dem Gegenquotienten erhalten. Man muss die globale Funktion repr// verwenden.

Anmerkungen Python 2 Python 3
Ich bin nicht hier. repr ((x)
`Papaya Whip + `2` Ich habe das Gefühl, dass ich das nicht kann.

1. Denken Sie daran, dass x alles sein kann. Eine Klasse, eine Funktion, ein Modul, ein grundlegender Datentyp, usw. ==repr== Die Funktion kann Parameter von jedem Typ verwenden== In Python 2 können Gegenquellen verschachtelt werden, was zu einem verwirrenden, aber effektiven Ausdruck führt. 2to3 ist intelligent genug, um diesen Schachtelanruf in die Repr-Funktion zu konvertieren.

  • Versuchen Sie... außer Satz

Die Syntax für die Erfassung von Abweichungen hat sich von Python 2 auf Python 3 verändert.

Anmerkungen Python 2 Python 3
Versuchen Sie:
Import mymodule
außer ImportError, e
pass
Versuchen Sie:
Import mymodule
außer ImportError als e:
Pass
try:
import mymodule
except (RuntimeError, ImportError), e
pass
try:
import mymodule
except (RuntimeError, ImportError) als e:
pass
Versuch:
Import mymodule
außer ImportError:
Pass
Keine Veränderung
Versuchen Sie:
import mymodule
except:
pass
Keine Veränderung

1, im Gegensatz zu Python 2, das Kommas nach den Ausnahmetypen hinzufügt, verwendet Python 3 ein neues Schlüsselwort, as. 2. Das Schlüsselwort as kann auch verwendet werden, wenn mehrere Arten von Ausnahmen auf einmal erfasst werden. 3. Wenn Sie eine Ausnahme erfassen, aber nicht auf die Ausnahmeobjekte selbst zugreifen möchten, ist die Syntax von Python 2 und Python 3 die gleiche. 4. Ähnlich ist die Syntax von Python 2 und Python 3 die gleiche, wenn Sie eine Sicherungsmethode (fallback) verwenden, um alle Ausnahmen zu erfassen. 5. Bei der Import von Modulen (oder in den meisten anderen Fällen) sollten Sie diese Methode absolut nicht verwenden (siehe Fallback oben). Andernfalls kann das Programm eine Ausnahme wie KeyboardInterrupt (wenn der Benutzer das Programm unterbricht, indem er Ctrl-C drückt) erfassen, was die Debugging schwieriger macht.

  • Aufheben

In Python 3 gibt es kleine Änderungen an der Syntax, um eine Anpassung zu vermeiden.

Anmerkungen Python 2 Python 3
Erheben Sie MyException unverändert
Erheben Sie MyException, Fehlermeldung erhöhen MyException (( Fehlermeldung)
Erheben Sie MyException,Fehlermeldung, a_traceback Erheben Sie MyException ((Errormessage).mit_traceback ((a_traceback)
Erheben Fehlermeldung nicht unterstützt

1. Die Ausrottung von Ausnahmen, die keine benutzerdefinierten Fehlinformationen mit sich bringen, verändert die Syntax in ihrer einfachsten Form nicht. 2. Die Änderung ist offensichtlich, wenn Sie eine Ausnahme mit einer benutzerdefinierten Fehlermeldung auswerfen möchten. Python 2 trennt die Ausnahmeregelung von der Fehlermeldung mit einem Komma; Python 3 gibt die Fehlermeldung als Parameter an die Ausnahmeregelung weiter. 3. Python 2 unterstützt eine kompliziertere Syntax, um eine Ausnahme mit benutzerdefiniertem Rückgriff (Stack Trace) zu entfernen. In Python 3 kannst du das auch tun, aber die Syntax ist völlig anders. 4. In Python 2 kannst du eine Ausnahme ohne Ausnahmeklasse mit nur einer Ausnahmesendung auswerfen. In Python 3 wird diese Form nicht mehr unterstützt. 2to3 wird dich warnen, dass es diese Syntax nicht automatisch reparieren kann.

  • Die Methode des Throws des Generators

In Python 2 hat der Generator eine Throw-Methode. Der Aufruf von a_generator.throw-Methode wirft eine Ausnahme aus, wenn der Generator unterbrochen ist, und gibt dann den nächsten Wert zurück, der von der Generatorfunktion abgerufen wurde. In Python 3 ist diese Funktion immer noch verfügbar, aber es gibt eine kleine Unterscheidung in der Syntax.

Anmerkungen Python 2 Python 3
a_generator.throw ((MyException)) Keine Veränderung
a_generator.throw ((MyException, Fehlermeldung) a_generator.throw(MyException(Fehlermeldung))
a_generator.throw( Fehlermeldung) nicht unterstützt

1. In der einfachsten Form werfen die Generatoren Ausnahmen aus, die keine benutzerdefinierten Fehlermeldungen enthalten. In diesem Fall ändert sich die Syntax von Python 2 zu Python 3 nicht. 2. Wenn der Generator eine Ausnahme mit einer benutzerdefinierten Fehlermeldung auslöst, müssen Sie die Fehlermeldungsstring an die Ausnahmeklasse weiterleiten, um sie zu instanzialisieren. 3. Python 2 unterstützt auch das Werfen von Ausnahmen, bei denen nur Ausnahmeschilder angezeigt werden. Python 3 unterstützt diese Syntax nicht, und 2to3 zeigt eine Warnmeldung an, dass Sie den Code manuell reparieren müssen.

  • Die globale Funktion xrange ((()

In Python 2 gibt es zwei Methoden, um Zahlen in einem bestimmten Bereich zu erhalten: range (), die eine Liste zurückgibt, und range (), die einen Iterator zurückgibt. In Python 3 gibt es keine Iteratoren mehr, xrange ().

Anmerkungen Python 2 Python 3
xrange ((10) Bereich ((10)
a_list = Bereich ((10) a_list = Liste ((Bereich))
[i für einen bestimmten Bereich ((10) ] [i für einen bestimmten Bereich ((10) ]
für i im Bereich ((10): Keine Veränderung
Summe (Bereich) Keine Veränderung

1, in der einfachsten Situation wird 2to3 einfach xrange ((() in range ((() ⇒ konvertiert. 2. Wenn Ihr Python 2-Code den Bereich verwendet, weiß 2to3 nicht, ob Sie eine Liste benötigen oder ob ein Iterator funktioniert. Aus Vorsicht kann 2to3 einen Fehler auslösen und dann den zurückgegebenen Wert von range zu einem Liste-Typ konvertieren. 3. Wenn eine xrange (()) -Funktion in der Listsortierung vorhanden ist, ist es nicht notwendig, den Wert, den sie zurückgibt, in eine Liste umzuwandeln, da die Listsortierung für die Iteratoren gleichermaßen wirksam ist. 4. Ähnlich wirkt der For-Lykel auch auf die Iteratoren, also ändert sich hier auch nichts. 5, die Funktion sum kann auf den Iderator wirken, so dass 2to3 auch hier keine Änderungen vornimmt. So wie bei einer Wörterbuchmethode, bei der der Wert als View und nicht mehr als Liste zurückgegeben wird, gilt dies auch für min (), max (), sum (), list (), tuple (), set (), sorted (), any (), all (), all ().

  • Die globalen Funktionen raw_input (()) und input (())

Python 2 hat zwei globale Funktionen, die für die Anforderung von Benutzerinputen in der Befehlszeile verwendet werden. Die erste ist Input, die darauf wartet, dass der Benutzer einen Python-Ausdruck eingibt und dann das Ergebnis zurückgibt. Die zweite ist Raw_input, die alles zurückgibt, was der Benutzer eingibt.

Anmerkungen Python 2 Python 3
Die Daten werden von der E-Mail-Adresse der E-Mail-Adresse erfasst. Eingabe (()
Die Daten werden von der E-Mail-Adresse der E-Mail-Adresse erfasst. Eingabe (( prompt)
Eingabe (() Bewertung (Einträge)

In der einfachsten Form wird raw_input ((() durch input ((() ersetzt. 2. In Python 2 kann die Raw_input () Funktion einen Tipper als Parameter angeben. In Python 3 wird diese Funktion behalten. 3. Wenn Sie wirklich den Benutzer auffordern möchten, einen Python-Expressionen einzugeben, können Sie die Ergebnisse berechnen, indem Sie die Input-Funktion aufrufen und den zurückgegebenen Wert an eval weitergeben.

  • Funktionsattribute func_*

In Python 2 kann der Code in einer Funktion auf die speziellen Eigenschaften der Funktion selbst zugreifen. In Python 3 wurden diese speziellen Eigenschaften zur Konsistenz umbenannt.

Anmerkungen Python 2 Python 3
a_function.func_name a_ Funktion._Name
a_function.func_doc a_ Funktion._- Ich weiß nicht.
a_function.func_defaults a_ Funktion._Defaults_
a_function.func_dict a_ Funktion._- Das ist nicht wahr.
a_function.func_closure a_ Funktion._Schließung
a_function.func_globals a_ Funktion._Weltweite
a_function.func_code a_ Funktion._Code_

1,__name__ Attribute ((original func_name) enthält den Namen der Funktion. 2. Die __doc__-Attribute ((originalfuncdoc) enthält die Dokumentstring (docstring), die Sie in Ihrem Funktionsquellcode definiert haben. 3,__defaults__ Attribute ((originalfunc_defaults) ist eine Komponente, die den Parameter-Default-Wert speichert. 4. Die Eigenschaft ___dict__ (original func_dict) ist ein Namensraum, der die Eigenschaft einer beliebigen Funktion unterstützt. 5. Die Eigenschaft ___closure__ (original func_closure) ist eine Komponente, die aus einem Cell-Objekt besteht und die Bindung einer Funktion an eine freie Variable enthält. 6. Die Eigenschaft __globals__ (original func_globals) ist eine Referenz zum globalen Modulnamenraum, in dem die Funktion selbst definiert ist. 7. Die Eigenschaft ___code__ ist ein Codeobjekt, das für die Kompilierung eines Funktionskörpers steht.

  • I/O-Methode xreadlines

In Python 2 gibt es eine xreadlines () Methode, die einen Iterator zurückgibt, der die Datei einmal liest. Dies ist besonders nützlich im For-Loop. In der Tat haben spätere Versionen von Python 2 diese Funktion an die Datei selbst hinzugefügt.

In Python 3 sind die xreadlines (() Methoden nicht mehr verfügbar. 2to3 kann einfache Situationen lösen, aber einige Randfälle erfordern manuelle Eingriffe.

Anmerkungen Python 2 Python 3
für Zeile in a_file.xreadlines(): für Zeile in a_file:
für die Zeile in a_file.xreadlines(5): keine Änderung (bruch)

1, wenn Sie zuvor keine Parameter xreadlines genannt haben ((), wird 2to3 es in das Dokumentobjekt selbst umwandeln. In Python 3 kann dieser umgewandelte Code die gleiche Arbeit erledigen wie zuvor: eine Zeile des Dokumentes einmal lesen und dann einen For-Loop-Loop ausführen. 2. Wenn Sie zuvor mit einem Argument (die Anzahl der gelesenen Zeilen) xreadlines aufgerufen haben, kann 2to3 die Umwandlung von Python 2 nach Python 3 nicht für Sie durchführen, und Ihr Code wird so versagen: AttributeError: _io.TextIOWrapper object has no attribute xreadlines.

  • Lambda-Funktionen mit Elementen und nicht mehreren Parametern

In Python 2 können Sie eine anonyme lambda-Funktion definieren, die mehrere Parameter empfangen kann, indem Sie die Anzahl der Elemente der Komponente als Argument angeben. In der Tat, der Python 2-Interpreter löst diese Komponente in unpack als benannte Argumente, und Sie können sie dann in der lambda-Funktion zitieren. In Python 3 können Sie immer noch eine Komponente als Argument der lambda-Funktion übergeben, aber der Python-Interpreter wird sie nicht als benannte Parameter analysieren.

Anmerkungen Python 2 Python 3
Lambda (x,): x+ f ((x) Das ist die Anzahl der Daten, die für die Prüfung verwendet werden.
Lambda (x, y): x+f(y) Lambda x_y: x_y[0]+f(x_y[1])
Lambda (x,(y,z)): x+ y+ z Lambda x_y_z: x_y_z[0]+x_y_z[1][0]+ x_y_z[1][1]
Lambda x, y, z: x+y + z unverändert

1, wenn Sie eine Lambda-Funktion definiert haben, die als Parameter eine Elementgruppe mit einem Element verwendet, wird in Python 3 in eine Lambda-Funktion umgewandelt, die eine Referenz zu x1[0] enthält. x1 ist ein 2to3-Skript, das automatisch generiert wird, basierend auf Naming-Parametern in der ursprünglichen Elementgruppe. 2. Die Lambda-Funktion mit zwei Elementen (x, y) als Parameter wird in x_y umgewandelt, die zwei Positionsparameter x_y[0] und x_y hat. 3, 2to3 Skripte können sogar Lambda-Funktionen verarbeiten, die Komponenten mit einem Nischen-Namen-Argument als Argumente verwenden. Der resultierende Code ist ein wenig schwer zu lesen, aber er wirkt in Python 3 wie der ursprüngliche Code in Python 2. 4. Sie können eine Lambda-Funktion definieren, die mehrere Parameter verwendet. Wenn keine Klammern um die Parameter herum sind, behandelt Python 2 sie als eine Lambda-Funktion, die mehrere Parameter enthält; in diesem Lambda-Funktionskörper beziehen Sie sich auf die Parameter mit Namen, wie in anderen Typen von Funktionen. Diese Syntax ist in Python 3 weiterhin gültig.

  • Eigenschaften der besonderen Methode

In Python 2 können Klassenmethoden auf ihre definierten Klassenobjekte zugreifen, aber auch auf die Methodeobjekte selbst. Im_self ist ein Instanzobjekt der Klasse; im_func ist ein Funktionsobjekt, im_class ist die Klasse selbst. In Python 3 werden diese Eigenschaften umbenannt, um den Namensverträgen für andere Eigenschaften zu folgen.

Anmerkungen Python 2 Python 3
aClassInstance.aClassMethod.im_func aClassInstance.aClassMethod._Funk_
aClassInstance.aClassMethod.im_self aClassInstance.aClassMethod._Selbst_
aClassInstance.aClassMethod.im_class aClassInstance.aClassMethod._Selbst_._Klasse_
  • __nonzero__ spezielle Methode

In Python 2 können Sie Ihre eigenen Klassen erstellen und sie in einem boolean Kontext verwenden. Zum Beispiel können Sie diese Klasse instanzialisieren und dieses Instanzobjekt in einem if-Satz verwenden.Nicht null() Methode, deren Rückgabewert True oder False ist, wird aufgerufen, wenn sich ein Beispielobjekt im Kontext von Boole befindet. In Python 3 können Sie immer noch die gleiche Funktion ausführen, aber der Name dieser speziellen Methode wurde geändert.- Ich weiß.()。

Anmerkungen Python 2 Python 3
Klasse A:
Nicht null(selbst):
Pass
Klasse A:
- Ich weiß.(selbst):
Pass
Klasse A:
Nicht null(selbst, x, y):
Pass
Keine Veränderung

1. Python 3 ruft ein Objekt auf, wenn es in einem Boolecontext verwendet wird.- Ich weiß.(), aber nichtNicht nullIch bin nicht derjenige. 2. Wenn Sie jedoch eine Definition haben, die zwei Parameter verwendet.Nicht nullDie 2to3-Skripte gehen davon aus, dass die von Ihnen definierte Methode für andere Zwecke verwendet wird, und ändern daher nicht den Code.

  • Achtstellar-Typ

Zwischen Python 2 und Python 3 hat sich die Syntax der Definition von oktalischen Zahlen leicht verändert.

Anmerkungen Python 2 Python 3
x = 0755 x = 0o755
  • sys.maxint

Die sys.maxint-Konstante ist nicht mehr präzise, da Lang- und Vollforms zusammengefasst wurden. Aber da dieser Wert für die Fähigkeit zur Feststellung bestimmter Plattformen nützlich ist, wird er von Python 3 beibehalten und in sys.maxsize umbenannt.

Anmerkungen Python 2 Python 3
von sys importmaxint von sys importmaxsize
a_function (sys.maxint) a_function (sys.maxsize)

1, maxint wird zu maxsize. 2. Alle sys.maxint werden zu sys.maxsize.

  • Globale Funktion kann aufgerufen werden

In Python 2 kannst du mit der globalen Funktion callable (*) überprüfen, ob ein Objekt aufgerufen werden kann. In Python 3 wurde diese globalen Funktion abgeschafft.Ruf mich an.Die Existenz von.

Anmerkungen Python 2 Python 3
- Ich kann nicht. Ich habe nichts.Ruf mich an.’)
  • Die globale Funktion ((zip))

In Python 2 kann die globale Funktion zip ((() beliebig viele Sequenzen als Parameter verwenden, die eine Liste aus Elementen zurückgeben. Die erste Elementgruppe enthält das erste Element jeder Sequenz; die zweite Elementgruppe enthält das zweite Element jeder Sequenz; und zwar hin und her. In Python 3 gibt zip ((() einen Iderator zurück, nicht eine Liste.

Anmerkungen Python 2 Python 3
ZIP ((a, b, c) Liste (a, b, c)
d.Beitritt ((ZIP ((a, b, c)) Keine Veränderung

In der einfachsten Form können Sie die Funktion, die vor der Funktion "zip" war, wiederherstellen, indem Sie die zurückgegebene Wert der Funktion "zip" in der Funktion "zip" einrufen. Die Funktion "list" durchläuft die Iteratoren, in denen die Funktion "zip" zurückgegeben wurde, und gibt dann die Liste der Ergebnisse zurück. In einer Kontextumgebung, in der bereits alle Elemente der Sequenz durchlaufen werden (z. B. hier ein Aufruf der Join-Methode), funktioniert der Zip-Iderator, der zurückkehrt. Die 2to3-Skripte erkennen diese Situationen und ändern Ihren Code nicht.

  • Standardfehler außergewöhnlich

In Python 2 ist StandardError die Basis für alle anderen eingebauten Abweichungen außer StopIteration, GeneratorExit, KeyboardInterrupt und SystemExit. In Python 3 wurde StandardError abgeschafft; mit Exception ersetzt.

Anmerkungen Python 2 Python 3
x =Standardfehler() x = Ausnahme
x = Standardfehler ((a, b, c) x = Ausnahme ((a, b, c)
  • Konstante im Modul types

Die verschiedenen Konstanten im Modul types helfen Ihnen, den Typ eines Objekts zu bestimmen. In Python 2 enthält er die Konstanten, die alle grundlegenden Datentypen repräsentieren, wie Dict und Int. In Python 3 wurden diese bereits abgeschafft.

Anmerkungen Python 2 Python 3
types.UnicodeType Str
types.StringType Bytes
types.DictType Dict
types.IntType Inneres
types.LongType Inneres
types.ListType Liste
types.NoneType Typ ((Nichts)
types.BooleanType Boole
types.BufferType Erinnerung
types.ClassType Typ
types.ComplexType Komplexe
types.EllipsisType Typ ((Ellipse)
types.FloatType Schwimmen
types.ObjectType Gegenstand
types.NotImplementedType Typ ((Nicht umgesetzt)
types.SliceType Schnitt
types.TupleType Schlagzeug
types.TypeType Typ
types.XRangeType Reichweite

Types.StringType wird als Byte und nicht als str gemappt, da die String-Sequenz in Python 2 in Wirklichkeit nur eine Sequenz von Byten ist, die mit einem bestimmten Zeichen codiert ist.

  • Globale Funktion ist instance ((()

Die isinstance-Funktion überprüft, ob ein Objekt ein Beispiel für eine bestimmte Klasse oder einen Typ ist. In Python 2 kann man eine Instanz mit einem Typ geben, der aus einem Typ besteht. Die Funktion gibt True zurück, wenn es sich um einen beliebigen Typ handelt.

Anmerkungen Python 2 Python 3
istinstanz ((x, ((int,float,int)) istinstanz ((x, ((int,float))
  • Basestring-Datentypen

In Python 2 gibt es zwei Arten von Stringtypen: Unicode- und nicht-Unicode-kodierte Stringtypen. Es gibt jedoch auch einen anderen Typ, den Basestring. Es ist ein abstrakter Datentyp, der eine Superklasse aus Str und Unicode-Typen darstellt.

Anmerkungen Python 2 Python 3
istinstance ((x, Basisstring) istinstanz ((x, str)
  • Module für itertools

In Python 2.3 wurde ein Modul für Itertools eingeführt, das Varianten für die globalen Funktionen zip, map und filter definiert, deren Rückgabe-Typ ein Iderator ist und nicht eine Liste. In Python 3 wurden diese Varianten in diesen Itertools abgeschafft, da der Rückgabe-Typ dieser globalen Funktionen ursprünglich ein Iderator war.

Anmerkungen Python 2 Python 3
- Ich bin nicht sicher, ob das stimmt. ZIP (a, b)
Die Kommission hat die Kommission aufgefordert Karte a, b
- Ich bin nicht derjenige, der das Problem hat. Filter a, b
von itertools importieren imap, izip, foo von itertools importieren foo

1, die weltweite zip-Funktion verwendet wird, anstatt itertools.izip-Funktion. 2、 mit map (() und nicht mit itertools.imap (() ー. 3,itertools.ifilter ((() wurde zu einem Filter ((() ▽ 4. Der Modul "itertools" ist in Python 3 noch vorhanden, er enthält lediglich keine Funktionen mehr, die bereits in den globalen Namensraum übertragen wurden.

  • sys.exc_type, sys.exc_value, sys.exc_traceback

Bei der Ausnahmeregelung gibt es drei Variablen, auf die Sie im sys-Modul zugreifen können: sys.exc_type, sys.exc_value, sys.exc_traceback. In der Tat gab es diese in der Zeit von Python 1.

Anmerkungen Python 2 Python 3
sys.exc_type sys.exc_info()[0]
sys.exc_value sys.exc_info() [1]
sys.exc_traceback sys.exc_info() [2]
  • Analyse der Liste der Elemente

In Python 2 müssen Sie keine Klammern um die Elementwerte herum setzen, wenn Sie eine Liste der Parameter schreiben müssen, die über die Elementargruppe verläuft. In Python 3 sind diese Klammern erforderlich.

Anmerkungen Python 2 Python 3
[i für 1,2] [i für iin(1,2)]
  • Die Funktion os.getcwdu (())

In Python 2 gibt es eine Funktion namens os.getcwd (), die den aktuellen Arbeitsverzeichnis als eine (nicht Unicode-kodierte) String zurückgibt. Da moderne Dateisystems nur mit einem Zeichencode umgehen können, gibt es in Python 2.3 die Funktion os.getcwdu (), die den aktuellen Arbeitsverzeichnis mit einem Unicode-kodierten String zurückgibt.

Anmerkungen Python 2 Python 3
Das ist nicht wahr. Das ist nicht das Problem.
  • Meta-Klasse

In Python 2 können Sie eine E-Klasse erstellen, indem Sie die Metaclass-Parameter in der Klassenerklärung definieren oder die Eigenschaft__metaclass__ einer speziellen Klassenstufe definieren. In Python 3 wurde die Eigenschaft__metaclass__ abgeschafft.

Anmerkungen Python 2 Python 3
Klasse C ((Meta-Klasse=PapayaMeta):
Pass
unverändert
Klasse Whip:- Was ist das?= PapayaMeta Klasse Whip ((metaclass=PapayaMeta):
Klasse C (Whipper, Beater):- Was ist das?= PapayaMeta Klasse C ((Whipper,Beater,metaclass=PapayaMeta):
Pass

1, die Metaclass-Parameter bei der Erklärung der Klasse erklären, was in Python 2 und Python 3 gilt, sie sind die gleichen. 2. In der Definition der Klasse wird erklärt, dass die __metaclass__-Attribute in Python 2 gültig ist, aber in Python 3 nicht mehr gültig ist. 3, 2to3 kann eine gültige Klassenerklärung erstellen, auch wenn die Klasse von mehreren Stammklassen geerbt wird.

  • Über den Code-Stil

Die folgenden Fixes sind im Wesentlichen keine echten Fixes. Das heißt, sie betreffen lediglich die Art und Weise des Codes und nicht die Art und Weise des Codes. Aber die Python-Entwickler haben ein vested interest daran, den Codestil so einheitlich wie möglich zu machen. Dafür gibt es ein offizielles Handbuch, das Python-Code-Stile speziell beschreibt.

  • set (literal) (deutlich)

In Python 2 ist der einzige Weg, um einen literalen Satz zu definieren, der Aufruf von set. In Python 3 ist dies weiterhin gültig, aber mit der neuen literalen Notation: Großklammern ist eine klarere Methode. Diese Methode ist außerhalb der Leerlinge gültig, da das Vokabular auch mit Großklammern gekennzeichnet ist, so dass {} ein leeres Vokabular und nicht eine Leerlinge darstellt.

2to3-Skripte reparieren standardmäßig keine set() literalen Werte. Um diese Funktion zu aktivieren, gibt man beim Aufruf von 2to3 den -f set_literal-Parameter an.

Anmerkungen Vorher Nach
Satz (([1,2,3]) {1,2,3}
Set (((1,2,3)) {1,2,3}
Set (([i für iin a_sequence]) {i für in a_sequenz}
  • Globale Funktionsbuffer (objektiv)

C-implementierte Python-Objekte können eine Puffer-Buffer-Interface ausführen, die es anderen Python-Codes erlaubt, einen Teil des Speichers direkt zu lesen und zu schreiben.

Das 2to3-Skript repariert die Buffer-Funktion nicht. Um diese Funktion zu aktivieren, wird der -f-Buffer-Parameter bei einem Aufruf von 2to3 angegeben.

Anmerkungen Vorher Nach
x = Puffer (y) x = Speicheransicht (y)
  • Die Leerzeichen um das Komma (ohne Zweifel)

Obwohl Python sehr strenge Anforderungen an den Raum für Einschränkungen und Ausdrücke hat, ist Python frei, ihn in anderen Bereichen zu verwenden. In Listen, Elemente, Sammlungen und Wörterbüchern kann ein Raum vor oder hinter einem Komma erscheinen, was jedoch keine schlechten Auswirkungen hat. Allerdings wird im Python Code Style Guide angegeben, dass es keinen Raum vor dem Komma geben darf und ein Raum hinter dem Komma enthalten sollte.

Das 2to3-Skript repariert standardmäßig keine Kommas. Um diese Funktion zu aktivieren, gibt man beim Aufrufen von 2to3 die -f wscomma-Argumentation an.

Anmerkungen Vorher Nach
a, b a, b
- Ich weiß nicht. (a: b)
  • Allgemeine Ausdrücke

In der Python-Community wurden viele Verhaltensweisen aufgebaut. Einige wie z.B. while 1: loop, die auf Python 1 zurückgeht. (Python hatte erst in Python 2.3 einen wirklich sinnvollen Bull-Typ, so dass Entwickler zuvor 1 und 0 ersetzt haben.)

Die 2to3-Skripte reparieren diese Konventionen nicht. Um diese Funktion zu aktivieren, geben Sie beim Aufruf von 2to3 die -f idioms-Parameter an.

Anmerkungen Vorher Nach
während 1:
do_stuff()
während True:
do_stuff()
Typ ((x) == T istinstanz ((x, T)
Typ ((x) ist T istinstanz ((x, T)
a_list = list ((a_sequence)) a_list = sortiert (a_sequence)
a_list.sort() - Das ist nicht meine Aufgabe.
- Das ist nicht meine Aufgabe.

Übersetzt vonCSDN Blog

Wie kann man Python2-Code in Python3-Code umwandeln?

Wie kann man Python 2.x-Code in Python 3.x umwandeln? Wie kann man Python 2.x in Python 3.x umwandeln?

  • 1.自己手动转换

Das muss nicht viel gesagt werden, wenn es nur um wenige Funktionen geht, wie print etc.

Wenn Sie das nicht tun, können Sie den Code selbst ändern.

  • 2.利用Python内置(Python脚本)工具,帮你自动转换

Die Python 2.x Version, wie die Python 2.7.2, die ich installiert habe, bringt einige nützliche Tools mit, nachdem sie von Windows heruntergeladen und installiert wurde.

其中一个叫做2to3.pyDas ist ein Programm, das Ihnen hilft, Python 2.x-Code in Python 3.x-Code umzuwandeln.

Sie befindet sich unter: Root-Verzeichnis für Python-Installationen\Python27\Tools\Scripts\2to3.py

如何利用2to3.pyImplementieren Sie den Code von Python 2.x in den Code von Python 3.x Zum Beispiel habe ich hier ein Python-Skript für Python 2.x:

D:\tmp\tmp_dev_root\python\python2_to_python3\34563264_Daten_von_site.py

Jetzt möchte ich es in Python 3.x-Code umwandeln.

Sie können das Skript, das Sie konvertieren möchten, mit cmd in Windows öffnen und dann ausführen.

D:\tmp\WordPress\DevRoot\Python27\Tools\Scripts\2to3.py -w 34563264_daten_von_site.py

Wenn die Umwandlung erfolgreich abgeschlossen ist, erfolgt die entsprechende Ausführung:

D:\tmp\tmp_dev_root\python\python2_to_python3>D:\tmp\WordPress\DevRoot\Python27\Tools\Scripts\2to3.py -w 34563264_data_from_site.py
RefactoringTool: Skipping implicit fixer: buffer
RefactoringTool: Skipping implicit fixer: idioms
RefactoringTool: Skipping implicit fixer: set_literal
RefactoringTool: Skipping implicit fixer: ws_comma
RefactoringTool: Refactored 34563264_data_from_site.py
--- 34563264_data_from_site.py  (original)
+++ 34563264_data_from_site.py  (refactored)
@@ -18,7 +18,7 @@
 import time;
 import codecs;
 import logging;
-import urllib;
+import urllib.request, urllib.parse, urllib.error;
 from datetime import datetime,timedelta;
 from optparse import OptionParser;
 from string import Template,replace;
@@ -90,7 +90,7 @@
         foundPhone = eachItemSoup.find(attrs={"class":"phone"});
         logging.debug("foundPhone=%s", foundPhone);
         if(foundPhone):
-            foundPhoneUni = unicode(foundPhone);
+            foundPhoneUni = str(foundPhone);
             logging.debug("foundPhoneUni=%s", foundPhoneUni);
             # case 1:
             #<p class="phone"><strong>phone:</strong>&nbsp;800.206.7886<br />
@@ -122,7 +122,7 @@
         foundWeb = eachItemSoup.find(attrs={"class":"web"});
         logging.debug("foundWeb=%s", foundWeb);
         if(foundWeb):
-            foundWebUni = unicode(foundWeb);
+            foundWebUni = str(foundWeb);
             logging.debug("foundWebUni=%s", foundWebUni);
 
             # <p class="web"><strong>e-mail:</strong>&nbsp;<a href="#">sales@cinesysinc.com</a><br />
@@ -151,7 +151,7 @@
         foundAddr = eachItemSoup.find(attrs={"class":"addr"});
         logging.debug("foundAddr=%s", foundAddr);
         if(foundAddr):
-            foundAddrUni = unicode(foundAddr);
+            foundAddrUni = str(foundAddr);
 
             # <p class="addr">
                 # <strong>address:</strong>&nbsp;740 SW 21st Ave, Suite #310<br />
RefactoringTool: Files that were modified:
RefactoringTool: 34563264_data_from_site.py

Hier können Sie sehen, dass 3456264_data_from_site.py, die ursprünglich in Python 3.x verwandelt worden ist, eine Version von Python 3.x ist.


Mehr

FangBeiWas ist mit Python 2 für botvs?

Kleine TräumeDer Retest-Server von BotVS verwendet die Python 2.7-Version, die für die BotVS-Plattform Python 2 und Python 3 unterstützt wird.