Heim  >  Artikel  >  Backend-Entwicklung  >  [Python-Tutorial] Der Unterschied zwischen den Versionen Python2.x und 3.x

[Python-Tutorial] Der Unterschied zwischen den Versionen Python2.x und 3.x

黄舟
黄舟Original
2016-12-24 15:44:451378Durchsuche

Der Unterschied zwischen Python 2.x- und 3.x-Versionen

Die 3.0-Version von Python wird oft als Python 3000 oder kurz Py3k bezeichnet. Dies ist ein wesentliches Upgrade im Vergleich zu früheren Versionen von Python.

Um nicht zu viel Belastung mit sich zu bringen, wurde Python 3.0 nicht im Hinblick auf Abwärtskompatibilität entwickelt.

Viele Programme, die für frühere Python-Versionen entwickelt wurden, können unter Python 3.0 nicht ordnungsgemäß ausgeführt werden.

Um bestehende Programme zu pflegen, ist Python 2.6 eine Übergangsversion, die im Wesentlichen die Syntax und Bibliotheken von Python 2.x verwendet. Sie berücksichtigt auch die Migration zu Python 3.0 und ermöglicht die Verwendung einiger Python 3.0 Syntax und Funktionen.


Neuen Python-Programmen wird empfohlen, die Syntax der Python 3.0-Version zu verwenden.


Es sei denn, die Ausführungsumgebung kann Python 3.0 nicht installieren oder das Programm selbst verwendet eine Bibliothek eines Drittanbieters, die Python 3.0 nicht unterstützt. Zu den Bibliotheken von Drittanbietern, die Python 3.0 derzeit nicht unterstützen, gehören Twisted, py2exe, PIL usw.

Die meisten Bibliotheken von Drittanbietern arbeiten hart daran, mit der Python 3.0-Version kompatibel zu sein. Auch wenn Python 3.0 nicht sofort einsetzbar ist, empfiehlt es sich, ein Programm zu schreiben, das mit Python 3.0 kompatibel ist, und es dann mit Python 2.6 oder Python 2.7 auszuführen.

Hauptänderungen

Die Änderungen in Python 3.0 betreffen hauptsächlich die folgenden Aspekte:

Die print-Anweisung ist weg und wurde durch die print()-Funktion ersetzt. Python 2.6 und Python 2.7 unterstützen diese Form der Drucksyntax teilweise. In Python 2.6 und Python 2.7 sind die folgenden drei Formen gleichwertig:

print "fish"
print ("fish") #注意print后面有个空格
print("fish") #print()不能带有任何其它参数

Allerdings unterstützt Python 2.6 tatsächlich die neue print()-Syntax:

from __future__ import print_function
print("fish", "panda", sep=', ')

Neu Die str-Kategorie repräsentiert eine Unicode-Zeichenfolge, die der Unicode-Kategorie in der Python 2.x-Version entspricht. Die Byte-Sequenz wird durch eine Syntax ähnlich wie b „abc“ dargestellt und durch die Byte-Klasse dargestellt, die der Str-Klasse von Python 2.x entspricht.

Die beiden Kategorien können nicht mehr implizit automatisch konvertiert werden, daher ist „fish“+b“panda“ ein Fehler in Python 3.x. Die korrekte Schreibweise ist „fish“+b“panda“.decode(“utf-8“). Python 2.6 kann eine Folge von Bytes automatisch als Unicode-Zeichenfolge erkennen, indem:

from __future__ import unicode_literals
print(repr("fish"))

Der Divisionsoperator „/“ gibt in Python 3.x immer eine Gleitkommazahl zurück. In Python 2.6 wird beurteilt, ob Dividend und Divisor ganze Zahlen sind. Wenn es sich um eine Ganzzahl handelt, wird ein Ganzzahlwert zurückgegeben, was einer Ganzzahldivision entspricht. Wenn es sich um eine Gleitkommazahl handelt, wird ein Gleitkommawert zurückgegeben.

Damit Python 2.6 einheitlich Gleitkommawerte zurückgibt, können Sie:

from __future__ import division
print(3/2)

Die Syntax zum Abfangen von Ausnahmen wurde von „except exc, var“ in „exclusive exc as var“ geändert. Verwenden Sie die Syntax außer (exc1, exc2) als Variable, um mehrere Ausnahmekategorien gleichzeitig abzufangen. Python 2.6 unterstützt bereits beide Syntaxen.

Neue Schreibweise: {1,2,3,4}. Beachten Sie, dass {} immer noch ein leeres Wörterbuch (Dikt) darstellt.

Dictionary Comprehensions {expr1: expr2 for k, v in d}, diese Syntax entspricht

result={}
for k, v in d.items():
    result[expr1]=expr2
return result

Set Comprehensions {expr1 for x in stuff}. Diese Syntax entspricht:

result = set()
for x in stuff:
    result.add(expr1)
return result

Die Oktalzahl muss als 0o777 geschrieben werden. Die ursprüngliche Form 0777 kann nicht verwendet werden, die Binärzahl muss als 0b111 geschrieben werden. Eine neue bin()-Funktion wurde hinzugefügt, um eine Ganzzahl in eine Binärzeichenfolge umzuwandeln. Python 2.6 unterstützt bereits beide Syntaxen.

dict.keys(), dict.values(), dict.items(), map(), filter(), range(), zip() geben keine Listen mehr zurück, sondern Iteratoren.

Wenn zwischen den beiden Objekten keine klar definierte sinnvolle Reihenfolge besteht. Wenn Sie sie mit 95ec6993dc754240360e28e0de8de30a, d2e24fbfa3a7d998970671c0359d3643= vergleichen, wird eine Ausnahme ausgelöst. Beispielsweise gibt 1 < "" in Python 2.6 True zurück, löst jedoch in Python 3.0 eine Ausnahme aus. Jetzt wurden die Funktionen cmp(), example.__cmp__() entfernt.

Sie können die Parameter und Rückgabewerte der Funktion mit Anmerkungen versehen. Mit dieser Funktion kann die IDE eine tiefergehende Analyse des Quellcodes durchführen. Fügen Sie beispielsweise Kategorieinformationen zu Parametern hinzu:

def sendMail(from_: str, to: str, title: str, body: str) -> bool:
    pass

Int- und Long-Typen zusammenführen.

Mehrere Module wurden umbenannt (gemäß PEP8):

Alter Name

Neuer Name

_winreg winreg

ConfigParser configparser

copy_reg copyreg

Queue queue

SocketServer socket server

repr reprlib

The Das StringIO-Modul ist jetzt mit dem neuen IO-Modul zusammengeführt. Neu, MD5, Gopherlib und andere Module wurden gelöscht. Python 2.6 unterstützt bereits das neue io-Modul.

httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib werden im http-Paket zusammengeführt.

Die exec-Anweisung wird abgebrochen, so dass nur die exec()-Funktion übrig bleibt. Python 2.6 unterstützt bereits die Funktion exec().

Das Obige ist der Inhalt des [Python-Tutorials] zu den Unterschieden zwischen Python 2.x und 3.x. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn). !


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn