Latest web development tutorials

Python2.x Unterschied mit Version 3 .x

3.0 Versionen von Python, die oft als Python 3000 genannt, oder einfach Py3k. In Bezug auf eine frühere Version von Python, ist dies ein wichtiges Upgrade.

Um nicht zu viel Belastung zu bringen, Python 3.0 ist nicht der Ansicht bei der Gestaltung der Abwärtskompatibilität.

Für viele Programme, frühere Versionen von Python nicht richtig auf Python ausführen 3.0.

Um des bestehenden Programms zu kümmern, Python 2.6 als Zwischen Version der Python 2.x die grundlegende Syntax und Bibliotheken, unter Berücksichtigung der Migration auf Python 3.0 und Python 3.0 ermöglicht die Verwendung eines Teils der Syntax der Funktion.

Das neue Programm wird empfohlen, Python 3.0 Python-Version Syntax zu verwenden.

Es sei denn, die Ausführungsumgebung kann nicht Python 3.0 installieren oder das Programm selbst nicht die Verwendung von Drittanbietern unterstützt Bibliotheken Python 3.0. Derzeit nicht Bibliotheken von Drittanbietern unterstützt Python 3.0 sind Verdreht, py2exe, PIL und dergleichen.

Die meisten Bibliotheken von Drittanbietern versuchen 3.0 kompatible Version zu Python. Wenn es nicht sofort Python 3.0 verwenden, auch die Entwicklung kompatibler Python 3.0-Version des Programms empfohlen, und dann Python 2.6, Python 2.7 ausgeführt wird.

Änderungen in Python 3.0 ist vor allem in den folgenden Bereichen:


Druckfunktion

print-Anweisung wird durch eine Funktion print () ersetzt gegangen. Python 2.6 und Python 2.7 unterstützen diese Form der Druck Syntax teilweise. In Python 2.6 und Python 2.7 innen, sind drei Formen äquivalent:

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

Allerdings Python 2.6 hat die Unterstützung tatsächlich die neue print () Syntax:

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

Unicode

Python 2 hatte ASCII str () Typ, Unicode () allein, nicht Byte-Typ.

Nun, in Python 3, haben wir endlich Unicode (UTF-8) String und ein Byte-Klasse: Byte und Bytearrays.

Da Python3.X Quelldatei Standard utf-8-Codierung, die den folgenden Code macht, ist legal:

>>> 中国 = 'china' 
>>>print(中国) 
china

Python 2.x

>>> str = "我爱北京天安门"
>>> str
'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
>>> str = u"我爱北京天安门"
>>> str
u'\u6211\u7231\u5317\u4eac\u5929\u5b89\u95e8'

Python 3.x

>>> str = "我爱北京天安门"
>>> str
'我爱北京天安门'

Division

Python Division in anderen Sprachen als der sehr hohen Ende, es ist ein sehr komplexes Regelwerk. Python in der Division mit zwei Operatoren und / //

Erstens, es / Abteilung:

In der Python 2.x / Division ebenso wie die meisten von uns mit der Sprache vertraut sind, wie zum Beispiel Java ah ah C auf die Ergebnisse einer Integer-Division ist ähnlich wurde eine ganze Zahl, wird der Bruchteil vollständig ignoriert, Gleitpunktberechnungen Division wird ein Teil des get bleiben Ergebnisse Gleitkommazahl.

In der Python 3.x / dividieren nicht mehr so, und für die Aufteilung zwischen ganzen Zahlen, das Ergebnis wird ein Schwimmer sein.

Python 2.x:

>>> 1 / 2
0
>>> 1.0 / 2.0
0.5

Python 3.x:

>>> 1/2
0.5

Für // Division wird diese Abteilung Boden Division, wird das Ergebnis Division automatisch eine Bodenoperation ist die gleiche in Python 2.x und Python 3.x in genannt.

Python 2.x:

>>> -1 // 2
-1

Python 3.x:

>>> -1 // 2
-1

Beachten Sie, dass den Bruchteil nicht verwerfen, sondern im Betrieb Boden zu tragen, wenn Sie den Bruchteil abfangen wollen, müssen Sie Mathe-Funktionsbaustein trunc zu verwenden

Python 3.x:

>>> import math
>>> math.trunc(1 / 2)
0
>>> math.trunc(-1 / 2)
0

abnormal

Die Verarbeitung in Python 3 ist auch leicht krankhafte Veränderungen, in Python 3 verwenden wir nun als Schlüsselwort.

Syntax für Ausnahmenaußer EXC fangen, var geändert außer EXC als var.

Syntax außer (exc1, exc2) als var können Ausnahmen mehrere Kategorien fangen. Python hat 2.6 Unterstützung für beide Syntax.

  • 1. 2.x-Ära, sind alle Arten von Objekten, die direkt in der 3.x-Ära geworfen werden kann, nur von BaseException Objekten geerbt kann geworfen werden.
  • 2. 2.x raise-Anweisung wirft ein Komma zu trennen Objekttypen und Parameter, abgebrochen 3.x diese wunderbare Formulierung der Konstruktor direkt aufrufen wirft ein Objekt sein kann.

In 2.x-Ära, Anomalien im Code zusätzlich zu dem Verfahrensfehler, aber auch einige gemeinsame Kontrollstrukturen oft tun sollte, in 3.x zu sehen ist, machen die Designer eine spezifischere anormale Veränderung nur im Fehler mit Ausnahme des Falles, um Anweisung zu fangen zu handhaben.


xrange

Erstellen Sie Iteration Objekt in Python 2 in xrange () Nutzung ist sehr beliebt. Zum Beispiel: Schleife oder eine Liste / Sammlung / Wörterbuch Comprehensions.

Diese Leistung ist sehr Bildgenerator (z. B. "Verzögerte Auswertung"). Aber die xrange-iterable ist unendlich, unbegrenzt Mittel, die Sie durchqueren können.

Wegen seiner faulen Auswertung, nicht nur, wenn man es einmal nicht durchqueren können, xrange () Funktion Verhältnisbereich () schneller (zB für Zyklen). Dennoch, im Vergleich zu einer Iteration wird Iteration nicht empfohlen, dass Sie mehrmals wiederholen, weil der Generator von Grund auf neu jedes Mal.

In Python 3 range () ist wie xrange (), um eine bestimmte xrange () Funktion gibt es nicht mehr zu erreichen (In Python 3 xrange () eine Ausnahme-Namen werfen).

import timeit

n = 10000
def test_range(n):
    return for i in range(n):
        pass

def test_xrange(n):
    for i in xrange(n):
        pass   

Python 2

print 'Python', python_version()

print '\ntiming range()' 
%timeit test_range(n)

print '\n\ntiming xrange()' 
%timeit test_xrange(n)

Python 2.7.6

timing range()
1000 loops, best of 3: 433 µs per loop


timing xrange()
1000 loops, best of 3: 350 µs per loop

Python 3

print('Python', python_version())

print('\ntiming range()')
%timeit test_range(n)

Python 3.4.1

timing range()
1000 loops, best of 3: 520 µs per loop
print(xrange(10))
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-5-5d8f9b79ea70> in <module>()
----> 1 print(xrange(10))

NameError: name 'xrange' is not defined

Octal Literaldarstellung

Oktalzahl muss 0o777 geschrieben werden, die ursprüngliche Form der 0777 kann nicht verwendet werden, müssen in binärer 0b111 geschrieben werden.

Hinzugefügt ein Behälter () Funktion wird verwendet, um eine ganze Zahl in eine binäre Zeichenfolge zu konvertieren. Python hat 2.6 Unterstützung für beide Syntax.

In Python 3.x und wörtliche Oktal nur einen Weg, das ist 0o1000.

python 2.x

>>> 0o1000
512
>>> 01000
512

python 3.x

>>> 01000
  File "<stdin>", line 1
    01000
        ^
SyntaxError: invalid token
>>> 0o1000
512

Ungleichungsoperatoren

Python 2.x bedeutet nicht, gibt es zwei Möglichkeiten zum Schreiben! = Und <>

Python 3.x fallen die <> Only! = Weg zu schreiben, aber zum Glück, ich benutze nie <> Diät


Entfernt den Ausdruck `` repr

Python 2.x in zurück Anführungszeichen `` repr Funktion entspricht der Rolle der

Python 3.x die `` Notation fallen zu lassen, nur repr Funktion erlaubt, Zweck, dies zu tun ist der Code zu machen sieht es klar? Aber ich fühle mich mit der Möglichkeit, selten zu repr, in der Regel nur dann, wenn es in Debug verwendet wird, die meiste Zeit oder die das Objekt beschreibt str Funktion in einen String verwenden.

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

Eine Vielzahl von Modulen werden umbenannt (nach PEP8)

Der alte Name Neuer Name
_winreg winreg
ConfigParser ConfigParser
copy_reg copyreg
Queue Schlange
Socket Socket
repr reprlib

StringIO Modul ist nun in die neue IO-Modul eingebaut. neue, md5, gopherlib Module werden gelöscht. Python hat 2.6 Unterstützung für das neue IO-Modul.

httplib, BaseHTTPServer, CGIHTTPServer, Simple, Cookie, cookielib in das http-Paket integriert werden.

Brechen Sie die exec-Anweisung, nur die Funktion exec (). Python 2.6 hat Unterstützung exec () Funktion.


5. Datentypen

1) Py3.X entfernt lange Art, jetzt gibt es nur eine ganze Zahl --int, aber es verhält sich wie ein 2.X Version des langen

2) hinzugefügt Bytes an die 2.X Version der acht Serien Typ entspricht, definieren ein Byte wörtliche Methode ist wie folgt:

>>> b = b'china' 
>>> type(b) 
<type 'bytes'> 

str Objekte und Bytes Objekte verwenden .encode () (str -> Byte) oder .decode () (Bytes -> str) Methode ineinander.

>>> s = b.decode() 
>>> s 
'china' 
>>> b1 = s.encode() 
>>> b1 
b'china' 

3) dict von .keys (). Gegenstände und .values ​​() Methode gibt einen Iterator, während die vorherigen iterkeys () und andere Funktionen werden verworfen. Zur gleichen Zeit entfernt dort dict.has_key (), ersetzen Sie es mit drin.