Heim Backend-Entwicklung Python-Tutorial Detaillierte Erklärung des Unterschieds zwischen Python3.x und Python2.x

Detaillierte Erklärung des Unterschieds zwischen Python3.x und Python2.x

Apr 05, 2017 pm 02:00 PM

Python3.x ist ein revolutionäres Upgrade von Python, das viele bisherige Funktionen abschafft und neue Funktionen einführt. Nicht vollständig kompatibel mit altem Code von 1.x und 2.x.

Python2.x ist abwärtskompatibel und die neueste Version ist Python 2.7. Darunter wurden die Versionen 2.6 und 2.7 veröffentlicht, um Python einen reibungslosen Übergang zu 3.X zu ermöglichen, und außerdem wurden einige 3.X-Funktionen hinzugefügt.

Derzeit unterstützen viele Bibliotheken 3.x nicht (z. B. Django, wxPython) und die meisten Anwendungen basieren immer noch auf 2.x. Anfängern wird die Verwendung der Version 2.7 empfohlen.

Hier sind einige Hauptunterschiede zwischen Python 3.X und 2.X

1. Leistung
Py3.0 führt den Pystone-Benchmark 30 % langsamer aus als Py2.5. Guido glaubt, dass Py3.0 viel Raum für Optimierung bietet und String- und Integer-Operationen ausführen kann
um gute Optimierungsergebnisse zu erzielen.
Die Leistung von Py3.1 ist 15 % langsamer als die von Py2.5, und es gibt noch viel Raum für Verbesserungen.

2. Kodierung
Py3.X-Quellcodedateien verwenden standardmäßig die UTF-8-Codierung, wodurch der folgende Code zulässig ist:
>>> China = 'China'
>>>print(China)
China

3. Grammatik
1) <> entfernt und alles durch !=
ersetzt 2) Entfernen Sie `` und verwenden Sie stattdessen repr()
. 3) Fügen Sie die Schlüsselwörter as und with as sowie True, False und None hinzu
4) Ganzzahlige Division gibt eine Gleitkommazahl zurück, um ein ganzzahliges Ergebnis zu erhalten, verwenden Sie bitte //
5) Nichtlokale Anweisung hinzufügen. Periphere (nicht globale) Variablen können direkt mit noclocal x
zugewiesen werden 6) Entfernen Sie die print-Anweisung und fügen Sie die Funktion print() hinzu, um dieselbe Funktion zu erreichen. Das Gleiche gilt für die exec-Anweisung, die in die exec()-Funktion
geändert wurde Zum Beispiel:
2.X: drucke „Die Antwort ist“, 2*2
3.X: print("Die Antwort ist", 2*2)
2.X: x drucken, 3.X: print(x, end=" ") # Verwenden Sie Leerzeichen, um Zeilen zu ersetzen
                                                                                                                            2.X: print >>sys.stderr, „schwerwiegender Fehler“
3.X: print("schwerwiegender Fehler", file=sys.stderr)
                                                       3.X: print((x, y)) # Anders als print(x, y)!
7) Das Verhalten von sequentiellen Operatoren wie x zurückzugeben 8) Die Eingabefunktion hat sich geändert, raw_input wurde gelöscht und durch Eingabe ersetzt:
2.X:guess = int(raw_input('Geben Sie eine Ganzzahl ein: ')) # Methode zum Lesen von Tastatureingaben
3.X:guess = int(input('Geben Sie eine Ganzzahl ein: '))

9) Entfernen Sie das Entpacken der Tupelparameter. Sie können die Funktion nicht wie def(a, (b, c)):pass
definieren 10) Neue oktale Wortvariable, die Funktion oct() wurde entsprechend geändert.
2. Die Methode von X lautet wie folgt:
>>> 0666
438
>>> oct(438)
'0666'
3.X so:
>>> 0666
SyntaxError: ungültiges Token (, Zeile 1)
>>> 0o666
438
>>> oct(438)
'0o666'
11) Binäre Literale und bin()-Funktion
hinzugefügt >>> bin(438)
'0b110110110'
>>> _438 = '0b110110110'
>>> _438
'0b110110110'
12) Erweitertes iterierbares Entpacken. In Py3. Objekte und seq sind iterierbar.
13) Das neue super() kann keine Parameter mehr an super() übergeben,
>>> Klasse C(Objekt):
             def __init__(self, a):
                                 print('C', a)
>>> Klasse D(C):
             def __init(self, a):
                 super().__init__(a) # Super() ohne Parameter aufrufen
>>> D(8)
C 8
<__main__.D Objekt bei 0x00D7ED90>
14) Neue Metaklassensyntax:
Klasse Foo(*bases, **kwds):
Pass
15) Unterstützen Sie den Klassendekorateur. Die Verwendung ist die gleiche wie beim Funktionsdekorator:
>>> def foo(cls_a):
              def print_func(self):
                                                     print('Hello, world!')
            cls_a.print = print_func
            return cls_a
>>> @foo
Klasse C(Objekt):
Pass
>>> C().print()
Hallo Welt!
Mit dem Klassendekorateur lässt sich der Trick spielen, die Zibetkatze in einen Prinzen zu verwandeln. Weitere Informationen finden Sie unter PEP 3129

4. Strings und Byte-Strings 1) Jetzt gibt es nur noch einen String-Typ, str, aber dieser ist fast derselbe wie die 2.x-Version von Unicode.

2) Bezüglich Byte-Strings siehe Punkt 2 von „Datentyp“

5. Datentyp 1) Py3.X hat den Long-Typ entfernt und jetzt gibt es nur noch einen Integer-Typ – int, aber er verhält sich wie 2. 2) Ein neuer Bytetyp wird hinzugefügt, der der Oktettzeichenfolge der Version 2.X entspricht. Die Methode zum Definieren eines Byteliterals ist wie folgt:
>>> b = b'china'
>>> Typ(b)

str-Objekte und bytes-Objekte können mit der Methode .encode() (str -> bytes) oder .decode() (bytes -> str) ineinander konvertiert werden.
>>> s = b.decode()
>>> s
'China'
>>> b1 = s.encode()
>>> b1
b'china'
3) Die Methoden .keys(), .items und .values() von dict geben Iteratoren zurück, während die vorherigen Funktionen iterkeys() und andere aufgegeben wurden. Ebenfalls entfernt wurde
dict.has_key(), ersetzen Sie es durch in

6. Objektorientiert
1) Einführung abstrakter Basisklassen (Abstract Base Classes, ABCs).
2) Containerklassen und Iteratorklassen haben die Größe ABC, daher gibt es im Cellections-Modul viel mehr Typen als in Py2.5.
>>> Sammlungen importieren
>>> print('n'.join(dir(collections)))
Abrufbar
Behälter
Hashbar
Artikelansicht
Iterierbar
Iterator
KeysView
Zuordnung
MappingView
MutableMapping
MutableSequence
MutableSet
NamedTuple
Reihenfolge
Festlegen
Größe
Werteansicht
__alle__
__builtins__
__doc__
__file__
__name__
_abcoll
_itemgetter
_sys
defaultdict
deque
Darüber hinaus haben numerische Typen auch die ABC-Größe. Zu diesen beiden Punkten siehe PEP 3119 und PEP 3141.
3) Die next()-Methode des Iterators wird in __next__() umbenannt und die integrierte Funktion next() wird hinzugefügt, um die __next__()-Methode des Iterators
aufzurufen 4) Zwei Dekoratoren, @abstractmethod und @abstractproperty, wurden hinzugefügt, um das Schreiben abstrakter Methoden (Eigenschaften) bequemer zu machen.

7. Anomalie
1) Alle Ausnahmen werden von BaseException geerbt und StardardError
wird entfernt 2) Das Sequenzverhalten und das .message-Attribut der Ausnahmeklasse entfernt
3) Verwenden Sie „raise Exception(args)“ anstelle der „raise Exception, args“-Syntax
4) Syntaxänderungen zum Abfangen von Ausnahmen; das Schlüsselwort as wird eingeführt, um Ausnahmeinstanzen zu identifizieren, in Py2.5:
>>> Versuchen Sie:
...    NotImplementedError('Error')
auslösen ... außer NotImplementedError, Fehler:

... ... print error.message
...
Fehler
In Py3.0:
>>> Versuchen Sie:
Erhöhen Sie NotImplementedError('Error')
          außer NotImplementedError als Fehler: #Achten Sie darauf als
                                print(str(error))
Fehler
5) Ausnahmekette, da __context__ in Version 3.0a1

nicht implementiert ist 8. Moduländerungen
1) Das cPickle-Modul wurde entfernt und kann durch das Pickle-Modul ersetzt werden. Irgendwann werden wir ein transparentes und effizientes Modul haben.
2) Imageop-Modul
entfernt 3) Audiodev, Bastion, bsddb185, Ausnahmen, Linuxaudiodev, MD5, MimeWriter, Mimify, Popen2,
entfernt Rexec-, Sets-, Sha-, Stringold-, Strop-, Sunaudiodev-, Timing- und xmllib-Module
4) Das bsddb-Modul wurde entfernt (separat veröffentlicht, verfügbar unter http://www.jcea.es/programacion/pybsddb.htm)
5) Neues Modul entfernt
6) Die Funktionen os.tmpnam() und os.tmpfile() werden in das tmpfile-Modul
verschoben 7) Das Tokenize-Modul funktioniert jetzt mit Bytes. Der Haupteinstiegspunkt ist nicht mehr generic_tokens, sondern tokenize.tokenize()

9. Andere
1) xrange() wird in range() umbenannt. Wenn Sie range() verwenden möchten, um eine Liste zu erhalten, müssen Sie es explizit aufrufen:
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2) Das Bytes-Objekt kann weder hashen, noch unterstützt es die Methoden b.lower(), b.strip() und b.split(), aber für die beiden letztgenannten können Sie b.strip(b’
verwenden ntr f’) und b.split(b’ ‘), um den gleichen Zweck zu erreichen
3) zip(), map() und filter() geben alle Iteratoren zurück. Und apply(), callable(), coerce(), execfile(), Reduce() und reload
()-Funktionen wurden entfernt

Jetzt können Sie hasattr() verwenden, um callable() zu ersetzen. Die Syntax von hasattr() lautet: hasattr(string, '__name__')

4) string.letters und zugehörige .lowercase und .uppercase werden entfernt, bitte verwenden Sie stattdessen string.ascii_letters
5) Wenn x < y nicht verglichen werden kann, wird eine TypeError-Ausnahme ausgelöst. Version 2.x gibt einen pseudozufälligen booleschen Wert
zurück 6) Die Mitglieder der __getslice__-Reihe werden aufgegeben. a[i:j] wird je nach Kontext in a.__getitem__(slice(I, j)) oder __setitem__ und
konvertiert __delitem__ Anrufe
7) Die Dateiklasse wird in Py2.5 aufgegeben:
>>> Datei

In Py3.X:
>>> Datei
Traceback (letzter Anruf zuletzt):
Datei „“, Zeile 1, in
        Datei
NameError: Name „Datei“ ist nicht definiert

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des Unterschieds zwischen Python3.x und Python2.x. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1677
14
PHP-Tutorial
1278
29
C#-Tutorial
1257
24
So setzen Sie den Kennwortschutz für Exportieren von PDF auf PS So setzen Sie den Kennwortschutz für Exportieren von PDF auf PS Apr 06, 2025 pm 04:45 PM

PDF mit Passwort geschützt in Photoshop exportieren: Öffnen Sie die Bilddatei. Klicken Sie auf "Datei" & gt; "Export" & gt; "Exportieren Sie als PDF". Stellen Sie die Option "Sicherheit" fest und geben Sie dasselbe Passwort zweimal ein. Klicken Sie auf "Exportieren", um eine PDF -Datei zu generieren.

Unterschied zwischen CentOS und Ubuntu Unterschied zwischen CentOS und Ubuntu Apr 14, 2025 pm 09:09 PM

Die wichtigsten Unterschiede zwischen CentOS und Ubuntu sind: Ursprung (CentOS stammt von Red Hat, für Unternehmen; Ubuntu stammt aus Debian, für Einzelpersonen), Packungsmanagement (CentOS verwendet yum, konzentriert sich auf Stabilität; Ubuntu verwendet apt, für hohe Aktualisierungsfrequenz), Support Cycle (Centos) (CENTOS bieten 10 Jahre. Tutorials und Dokumente), Verwendungen (CentOS ist auf Server voreingenommen, Ubuntu ist für Server und Desktops geeignet). Weitere Unterschiede sind die Einfachheit der Installation (CentOS ist dünn)

Der Unterschied zwischen H5- und Miniprogramm und Apps Der Unterschied zwischen H5- und Miniprogramm und Apps Apr 06, 2025 am 10:42 AM

H5. Der Hauptunterschied zwischen Mini -Programmen und App ist: Technische Architektur: H5 basiert auf Web -Technologie, und Mini -Programme und Apps sind unabhängige Anwendungen. Erfahrung und Funktionen: H5 ist leicht und einfach zu bedienen, mit begrenzten Funktionen; Mini -Programme sind leicht und haben eine gute Interaktivität. Apps sind leistungsstark und haben reibungslose Erfahrung. Kompatibilität: H5 ist plattformübergreifend, Applets und Apps werden von der Plattform eingeschränkt. Entwicklungskosten: H5 verfügt über niedrige Entwicklungskosten, mittlere Mini -Programme und die höchste App. Anwendbare Szenarien: H5 eignet sich für Informationsanzeigen, Applets eignen sich für leichte Anwendungen und Apps eignen sich für komplexe Funktionen.

Warum müssen Sie Vue.use (Vuerouter) in der Datei idex.js unter dem Router -Ordner anrufen? Warum müssen Sie Vue.use (Vuerouter) in der Datei idex.js unter dem Router -Ordner anrufen? Apr 05, 2025 pm 01:03 PM

Die Notwendigkeit der Registrierung von Vuerouter in der Datei index.js -Datei im Ordner Router Bei der Entwicklung von VUE -Anwendungen stoßen Sie häufig Probleme mit der Routing -Konfiguration. Besonders...

Wie benutze ich XPath, um von einem bestimmten DOM -Knoten in JavaScript aus zu suchen? Wie benutze ich XPath, um von einem bestimmten DOM -Knoten in JavaScript aus zu suchen? Apr 04, 2025 pm 11:15 PM

Detaillierte Erläuterung der XPath -Suchmethode unter DOM -Knoten in JavaScript, wir müssen häufig bestimmte Knoten aus dem DOM -Baum basierend auf XPath -Ausdrücken finden. Wenn Sie ...

Der Unterschied zwischen Laravel und ThinkPhp Der Unterschied zwischen Laravel und ThinkPhp Apr 18, 2025 pm 01:09 PM

Laravel und ThinkPhp sind beide populäre PHP -Frameworks und haben ihre eigenen Vor- und Nachteile in der Entwicklung. In diesem Artikel wird die beiden Tiefe verglichen und ihre Architektur, Funktionen und Leistungsunterschiede hervorgehoben, um Entwicklern zu helfen, fundierte Entscheidungen auf der Grundlage ihrer spezifischen Projektanforderungen zu treffen.

Was ist der Unterschied zwischen Syntax zum Hinzufügen von Spalten in verschiedenen Datenbanksystemen Was ist der Unterschied zwischen Syntax zum Hinzufügen von Spalten in verschiedenen Datenbanksystemen Apr 09, 2025 pm 02:15 PM

不同数据库系统添加列的语法为 : MySQL : Alter table table_name add column_name data_type; postgresql : Alter table table_name add column_name data_type; oracle : Alter table table table table_name add add (column_name data_type);

So sehen Sie den Firewall -Status in CentOs So sehen Sie den Firewall -Status in CentOs Apr 14, 2025 pm 08:18 PM

Der Bundesstaat CentOS-Firewall kann über den Befehl sudo Firewall-CMD-State-zurückkehren und zum Laufen zurückkehren oder nicht. Für detailliertere Informationen können Sie Sudo Firewall-CMD-List-All verwenden, um konfigurierte Bereiche, Dienste, Ports usw. anzuzeigen. Wenn Firewall-CMD das Problem nicht löst, können Sie sudo iptables -l -n verwenden, um Iptables-Regeln anzuzeigen. Stellen Sie sicher, dass Sie eine Sicherung vornehmen, bevor Sie die Firewall -Konfiguration ändern, um die Serversicherheit zu gewährleisten.

See all articles