Was ist neu in Python 3?
Das __future__ Modul
Python 3.x führte einige Python 2-inkompatible Schlüsselwörter und Funktionen ein, die über das integrierte Modul __future__ in Python 2 importiert werden können. Es wird empfohlen, __future__ -Importe zu verwenden, wenn Sie die Python 3.x-Unterstützung für Ihren Code planen.
Wenn Sie beispielsweise das ganzzahlige Teilungsverhalten von Python 3.x in Python 2 möchten, fügen Sie die folgende Importanweisung hinzu.
from __future__ import division
Die Druckfunktion
Die bemerkenswerteste und bekannteste Änderung in Python 3 ist, wie die printFunktion wird verwendet. Die Verwendung von Klammern () mit Druckfunktion ist jetzt obligatorisch. In Python 2 war dies optional.
print "Hello World" #is acceptable in Python 2
print ("Hello World") # in Python 3, print must be followed by ()
Die Funktion print () fügt standardmäßig am Ende eine neue Zeile ein. In Python 2 kann es unterdrückt werden, indem am Ende ',' gesetzt wird. In Python 3 hängt "end = ''" Leerzeichen anstelle von Zeilenumbrüchen an.
print x, # Trailing comma suppresses newline in Python 2
print(x, end=" ") # Appends a space instead of a newline in Python 3
Eingabe von Tastatur lesen
Python 2 verfügt über zwei Versionen von Eingabefunktionen: input() und raw_input(). Die Funktion input () behandelt die empfangenen Daten als Zeichenfolge, wenn sie in Anführungszeichen '' oder "" enthalten sind, andernfalls werden die Daten als Zahl behandelt.
In Python 3 ist die Funktion raw_input () veraltet. Ferner werden die empfangenen Daten immer als Zeichenfolge behandelt.
In Python 2
>>> x = input('something:')
something:10 #entered data is treated as number
>>> x
10
>>> x = input('something:')
something:'10' #entered data is treated as string
>>> x
'10'
>>> x = raw_input("something:")
something:10 #entered data is treated as string even without ''
>>> x
'10'
>>> x = raw_input("something:")
something:'10' #entered data treated as string including ''
>>> x
"'10'"
In Python 3
>>> x = input("something:")
something:10
>>> x
'10'
>>> x = input("something:")
something:'10' #entered data treated as string with or without ''
>>> x
"'10'"
>>> x = raw_input("something:") # will result NameError
Traceback (most recent call last):
File "<pyshell#3>", line 1, in
<module>
x = raw_input("something:")
NameError: name 'raw_input' is not defined
Integer Division
In Python 2 wird das Ergebnis der Division zweier Ganzzahlen auf die nächste Ganzzahl gerundet. Infolgedessen zeigt 3/2 1. Um eine Gleitkommadivision zu erhalten, muss der Zähler oder Nenner explizit als Gleitkomma verwendet werden. Daher ergibt entweder 3,0 / 2 oder 3 / 2,0 oder 3,0 / 2,0 1,5
Python 3 wertet 3/2 standardmäßig mit 1,5 aus, was für neue Programmierer intuitiver ist.
Unicode-Darstellung
In Python 2 müssen Sie eine Zeichenfolge mit au markieren, wenn Sie sie als Unicode speichern möchten.
Python 3 speichert Zeichenfolgen standardmäßig als Unicode. Wir haben Unicode-Zeichenfolgen (utf-8) und 2-Byte-Klassen: Byte- und Byte-Arrays.
xrange () Funktion entfernt
In Python 2 gibt range () eine Liste zurück, und xrange () gibt ein Objekt zurück, das die Elemente im Bereich nur bei Bedarf generiert, wodurch Speicherplatz gespart wird.
In Python 3 wird die Funktion range () entfernt und xrange () wurde in range () umbenannt. Darüber hinaus unterstützt das range () -Objekt das Slicing in Python 3.2 und höher.
Ausnahme auslösen
Python 2 akzeptiert beide Notationen, die 'alte' und die 'neue' Syntax. Python 3 löst einen SyntaxError aus, wenn wir das Ausnahmeargument nicht in Klammern setzen.
raise IOError, "file error" #This is accepted in Python 2
raise IOError("file error") #This is also accepted in Python 2
raise IOError, "file error" #syntax error is raised in Python 3
raise IOError("file error") #this is the recommended syntax in Python 3
Argumente in Ausnahmen
In Python 3 sollten Argumente für eine Ausnahme mit dem Schlüsselwort 'as' deklariert werden.
except Myerror, err: # In Python2
except Myerror as err: #In Python 3
next () Funktion und .next () Methode
In Python 2 ist next () als Methode des Generatorobjekts zulässig. In Python 2 wird auch die Funktion next () zum Iterieren über das Generatorobjekt akzeptiert. In Python 3 wird jedoch next (0 als Generatormethode abgebrochen und ausgelöstAttributeError.
gen = (letter for letter in 'Hello World') # creates generator object
next(my_generator) #allowed in Python 2 and Python 3
my_generator.next() #allowed in Python 2. raises AttributeError in Python 3
2to3 Dienstprogramm
Zusammen mit dem Python 3-Interpreter wird das Skript 2to3.py normalerweise im Ordner tools / scripts installiert. Es liest Python 2.x-Quellcode und wendet eine Reihe von Fixern an, um ihn in einen gültigen Python 3.x-Code umzuwandeln.
Here is a sample Python 2 code (area.py):
def area(x,y = 3.14):
a = y*x*x
print a
return a
a = area(10)
print "area",a
To convert into Python 3 version:
$2to3 -w area.py
Converted code :
def area(x,y = 3.14): # formal parameters
a = y*x*x
print (a)
return a
a = area(10)
print("area",a)