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)