Rheinwerk Computing < openbook >

 
Inhaltsverzeichnis
1 Einleitung
2 Die Programmiersprache Python
Teil I Einstieg in Python
3 Erste Schritte im interaktiven Modus
4 Der Weg zum ersten Programm
5 Kontrollstrukturen
6 Dateien
7 Das Laufzeitmodell
8 Funktionen, Methoden und Attribute
9 Informationsquellen zu Python
Teil II Datentypen
10 Das Nichts – NoneType
11 Operatoren
12 Numerische Datentypen
13 Sequenzielle Datentypen
14 Zuordnungen
15 Mengen
16 Collections
17 Datum und Zeit
18 Aufzählungstypen – Enum
Teil III Fortgeschrittene Programmiertechniken
19 Funktionen
20 Modularisierung
21 Objektorientierung
22 Ausnahmebehandlung
23 Iteratoren
24 Kontextobjekte
25 Manipulation von Funktionen und Methoden
Teil IV Die Standardbibliothek
26 Mathematik
27 Kryptografie
28 Reguläre Ausdrücke
29 Schnittstelle zu Betriebssystem und Laufzeitumgebung
30 Kommandozeilenparameter
31 Dateisystem
32 Parallele Programmierung
33 Datenspeicherung
34 Netzwerkkommunikation
35 Debugging und Qualitätssicherung
36 Dokumentation
Teil V Weiterführende Themen
37 Anbindung an andere Programmiersprachen
38 Distribution von Python-Projekten
39 Grafische Benutzeroberflächen
40 Python als serverseitige Programmiersprache im WWW – ein Einstieg in Django
41 Wissenschaftliches Rechnen
42 Insiderwissen
43 Von Python 2 nach Python 3
A Anhang
Stichwortverzeichnis

Download:
- Beispielprogramme, ca. 464 KB

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Python 3 von Johannes Ernesti, Peter Kaiser
Das umfassende Handbuch
Buch: Python 3

Python 3
Pfeil 43 Von Python 2 nach Python 3
Pfeil 43.1 Die wichtigsten Unterschiede
Pfeil 43.1.1 Ein-/Ausgabe
Pfeil 43.1.2 Iteratoren
Pfeil 43.1.3 Strings
Pfeil 43.1.4 Ganze Zahlen
Pfeil 43.1.5 Exception Handling
Pfeil 43.1.6 Standardbibliothek
Pfeil 43.1.7 Neue Sprachelemente in Python 3
Pfeil 43.2 Automatische Konvertierung
Pfeil 43.3 Geplante Sprachelemente
 
Zum Seitenanfang

43    Von Python 2 nach Python 3 Zur vorigen ÜberschriftZur nächsten Überschrift

Die Programmiersprache Python befindet sich in fortlaufender Entwicklung und hat seit der Veröffentlichung der Version 1.0 im Januar 1994 viele Veränderungen erfahren. In diesem Kapitel werden wir die Entwicklung der Sprache Python beschreiben. Dabei beginnen wir mit der Version 2.0, die im Jahr 2000 veröffentlicht wurde.

Im Anschluss daran wird der große Sprung auf Version 3.0 im Detail besprochen. Python 2 ist auch heute noch im Einsatz, weswegen Sie sich über die bestehenden Unterschiede im Klaren sein sollten.

Tabelle 43.1 nennt die wichtigen Neuerungen der einzelnen Python-Versionen. Diese Liste ist nicht vollständig, die Änderungen sind zu zahlreich, um sie hier vollständig wiederzugeben.

Eine umfassende Auflistung aller Änderungen einer Python-Version finden Sie in der entsprechenden Dokumentation unter dem Titel »What’s New in Python x.y«.

Version Jahr Wesentliche Neuerungen
2.0 2000
  • der unicode-Datentyp für Unicode-Strings
  • List Comprehensions
  • erweiterte Zuweisungen
  • Garbage Collection für zyklische Referenzen
2.1 2001
  • das __future__-Modul
  • Vergleichsoperatoren können einzeln überladen werden.
  • Die import-Anweisung arbeitet auch unter Windows und macOS case-sensitive.
2.2 2001
  • verschachtelte Namensräume
  • New-Style Classes erlauben das Erben von eingebauten Datentypen.
  • Mehrfachvererbung
  • Properties
  • das Iterator-Konzept
  • statische Methoden und Klassenmethoden
  • automatische Konvertierung der Datentypen long und int
2.3 2003
  • der set-Datentyp (zunächst noch im sets-Modul, ab 2.4 als eingebauter Datentyp)
  • Generatorfunktionen
  • der Datentyp bool
2.4 2004
  • Generator Expressions
  • Funktions- und Klassendecorator
  • das decimal-Modul
2.5 2006
  • Conditional Expressions
  • die relative import-Anweisung
  • Vereinheitlichung der try-except-finally-Anweisung. Zuvor konnten except- und finally-Zweige nicht gemeinsam verwendet werden.
2.6 2008 Die Version 2.6 wurde zeitgleich zu 3.0 entwickelt und enthält die Neuerungen aus Version 3.0, die die Abwärtskompatibilität der Sprache nicht beeinträchtigen:
  • die with-Anweisung
  • das multiprocessing-Paket
  • eine neue Syntax zur String-Formatierung
  • print wird zu einer Funktion.
  • Literale für Zahlen im Oktal- und Binärsystem
2.7 2010 Die Version 2.7 ist die letzte Version von Python 2 und beinhaltet einige der Neuerungen von Python 3.1 bzw. 3.2:
  • Dictionary- und Set Comprehensions
  • das argparse-Modul
3.0 2008 Änderungen, die nicht auch in Version 2.6 enthalten sind:
  • Viele eingebaute Funktionen und Methoden geben jetzt Iteratoren anstelle von Listen zurück.
  • Der Datentyp long verschwindet.
  • der bytes-Datentyp für Binärdaten
  • Der Datentyp str speichert jetzt ausschließlich Unicode-Strings.
  • Dictionary Comprehensions
  • reine Schlüsselwortparameter
  • die nonlocal-Anweisung
  • ein Literal für den Datentyp set
  • Viele Module der Standardbibliothek wurden entfernt, umbenannt oder verändert.
3.1 2009
  • der Datentyp OrderedDict im collections-Modul
  • die Methode bit_length des Datentyps int
  • die automatische Nummerierung von Platzhaltern bei der String-Formatierung
  • ein neuer Algorithmus zur internen Repräsentation von float-Werten
3.2 2011
  • Die *.pyc-Kompilate werden jetzt in einem Unterverzeichnis namens __pycache__ gesammelt.
  • Viele Module der Standardbibliothek wurden erweitert.
3.3 2012
  • die yield from-Syntax
  • Die u"string" Syntax ist wieder erlaubt.
  • Die Exception-Hierarchie wurde überarbeitet.
3.4 2014
  • umfassende Integration von PIP
  • das Modul enum
3.5 2015
  • der Operator @ für Matrizenmultiplikation
  • Koroutinen mit async und await
3.6 2016
  • das f-Literal für formatierte Strings
  • eine Syntax für die Annotation von Variablen
  • asynchrone Generatoren und Comprehensions

Tabelle 43.1    Entwicklung von Python

Im Folgenden wird der einschneidende Versionssprung von Python 2 auf Python 3 besprochen. Das Besondere an der Version 3.0 ist, dass sie nicht mehr abwärtskompatibel mit älteren Python-Versionen ist. Das bedeutet, dass ein Programm, das für Python 2 geschrieben wurde, mit großer Wahrscheinlichkeit nicht unter Python 3 lauffähig ist. Der Bruch mit der Abwärtskompatibilität erlaubte es den Python-Entwicklern, lange mitgeschleppte Unschönheiten und Inkonsequenzen aus der Sprache zu entfernen und so eine rundum erneuerte Version von Python zu veröffentlichen.

Alles in allem sind die mit Python 3.0 eingeführten Änderungen nicht dramatisch, es bedarf jedoch einer gewissen Umgewöhnung, um von Python 2 auf Python 3 umzusteigen. Aus diesem Grund besprechen wir in diesem Kapitel übersichtlich die wichtigsten Unterschiede zwischen Python 2 und 3.

Python 3 beinhaltet ein Tool namens 2to3, das das Umstellen eines größeren Projekts von Python 2 auf 3 erleichtert, indem es den Quellcode zu großen Teilen automatisch konvertiert. Die Handhabung dieses Programms erklären wir im zweiten Abschnitt.

 
Zum Seitenanfang

43.1    Die wichtigsten Unterschiede Zur vorigen ÜberschriftZur nächsten Überschrift

Im Folgenden sind die wichtigsten Unterschiede zwischen den Python-Versionen 2 und 3 aufgeführt.

[»]  Hinweis

Mit Python 3 wurden auch viele subtile Änderungen, beispielsweise an den Schnittstellen vieler Module der Standardbibliothek, vorgenommen, die hier aus naheliegenden Gründen nicht alle erläutert werden können. Antworten auf solch detaillierte Fragen finden Sie in den Onlinedokumentationen auf der Python-Website http://www.python.org.

 
Zum Seitenanfang

43.1.1    Ein-/Ausgabe Zur vorigen ÜberschriftZur nächsten Überschrift

In puncto Ein-/Ausgabe gab es zwei auffällige, aber schnell erklärte Änderungen:

  • Das Schlüsselwort print aus Python 2 ist einer Built-in Function gleichen Namens gewichen. In der Regel brauchen hier also nur Klammern um den auszugebenden Ausdruck ergänzt zu werden:
    Python 2 Python 3
    >>> print "Hallo Welt"
    Hallo Welt
    >>> print("Hallo Welt")
    Hallo Welt
    >>> print "ABC", "DEF", 2+2
    ABC DEF 4
    >>> print("ABC", "DEF", 2+2)
    ABC DEF 4
    >>> print >>f, "Dateien"
    >>> print("Dateien", file=f)
    >>> for i in range(3):
    ... print i,
    ...
    0 1 2
    >>> for i in range(3):
    ... print(i, end=" ")
    ...
    0 1 2

    Tabelle 43.2    print ist jetzt eine Funktion.

    Nähere Informationen, insbesondere zu den Schlüsselwortparametern der Built-in Function print, finden Sie in Abschnitt 19.8, »Eingebaute Funktionen«
  • Die zweite auffällige Änderung hinsichtlich der Ein-/Ausgabe betrifft die Built-in Function input. Die input-Funktion aus Python 3 entspricht der raw_input-Funktion aus Python 2. Eine Entsprechung für die input-Funktion aus Python 2 gibt es in Python 3 als Built-in Function nicht, doch ihr Verhalten kann mithilfe von eval nachgebildet werden:
Python 2 Python 3
>>> input("Ihr Wert: ")
Ihr Wert: 2**5
32
>>> eval(input("Ihr Wert: "))
Ihr Wert: 2**5
32
>>> raw_input("Ihr Wert: ")
Ihr Wert: 2**5
'2**5'
>>> input("Ihr Wert: ")
Ihr Wert: 2**5
'2**5'

Tabelle 43.3    input vs. raw_input

Dies waren die beiden gewöhnungsbedürftigsten Änderungen, was die Bildschirmausgabe bzw. Tastatureingabe betrifft.

 
Zum Seitenanfang

43.1.2    Iteratoren Zur vorigen ÜberschriftZur nächsten Überschrift

Obwohl Python 2 das Iterator-Konzept bereits unterstützt, geben viele Funktionen, die für gewöhnlich zum Iterieren über eine bestimmte Menge verwendet werden, eine Liste der Elemente dieser Menge zurück, so beispielsweise die prominente Funktion range. Üblicherweise wird diese Liste aber nur in einer for-Schleife durchlaufen. Dies kann durch Verwendung von Iteratoren eleganter und speicherschonender durchgeführt werden.

Aus diesem Grund geben viele der Funktionen und Methoden, die in Python 2 eine Liste zurückgeben, in Python 3 einen auf die Gegebenheiten zugeschnittenen Iterator zurück. Um diese Objekte in eine Liste zu überführen, können sie einfach der Built-in Function list übergeben werden.

Damit verhält sich zum Beispiel die range-Funktion aus Python 3 gerade so wie die xrange-Funktion aus Python 2. Ein Aufruf von list(range()) in Python 3 ist äquivalent zur range-Funktion aus Python 2.

Python 2 Python 3
>>> xrange(5)
xrange(5)
>>> range(5)
range(0, 5)
>>> range(5)
[0, 1, 2, 3, 4]
>>> list(range(5))
[0, 1, 2, 3, 4]

Tabelle 43.4    range gibt jetzt einen Iterator zurück.

Abgesehen von range sind von dieser Änderung die Built-in Functions map, filter und zip betroffen, die nun einen Iterator zurückgeben. Die Methoden keys, items und values eines Dictionarys geben jetzt ein sogenanntes view-Objekt zurück, das ebenfalls iterierbar ist. Die Methoden iterkeys, iteritems und itervalues eines Dictionarys sowie die Built-in Function xrange aus Python 2 existieren in Python 3 nicht mehr.

 
Zum Seitenanfang

43.1.3    Strings Zur vorigen ÜberschriftZur nächsten Überschrift

Die wohl grundlegendste Änderung in Python 3 ist die Umdeutung des Datentyps str. In Python 2 existieren zwei Datentypen für Strings:  str und unicode. Während Ersterer zum Speichern beliebiger Byte-Folgen verwendet werden kann, war Letzterer für Unicode-Text zuständig.

In Python 3 ist der Datentyp str ausschließlich für Text zuständig und mit dem unicode-Datentyp aus Python 2 vergleichbar. Zum Speichern von byte-Folgen gibt es in Python 3 die Datentypen bytes und bytearray, wobei es sich bei bytes um einen unveränderlichen und bei bytearray um einen veränderlichen Datentyp handelt. In Python 3 existiert weder das u-Literal für Unicode-Strings noch der Datentyp unicode.

Die Datentypen bytes und str sind in Python 3 klarer voneinander abgegrenzt, als es bei den Datentypen str und unicode in Python 2 der Fall ist. So ist es beispielsweise nicht mehr möglich, einen String und einen bytes-String ohne explizites Codieren bzw. Decodieren zusammenzufügen.

Tabelle 43.5 weist die Unterschiede zwischen str in Python 2 und str in Python 3 exemplarisch auf.

Python 2 Python 3
>>> u = u"Ich bin Unicode"
>>> u
u'Ich bin Unicode'
>>> u.encode("ascii")
'Ich bin Unicode'
>>> u = "Ich bin Unicode"
>>> u
'Ich bin Unicode'
>>> u.encode("ascii")
b'Ich bin Unicode'
>>> a = "Ich bin ASCII"
>>> a.decode()
u'Ich bin ASCII'
>>> a = b"Ich bin ASCII"
>>> a.decode()
'Ich bin ASCII'
>>> "abc" + u"def"
u'abcdef'
>>> b"abc" + "def"
Traceback (most recent call last):
[…]
TypeError: can't concat bytes to str

Tabelle 43.5    Strings

Die stärkere Abgrenzung von str und bytes in Python 3 hat Auswirkungen auf die Standardbibliothek. So dürfen Sie beispielsweise zur Netzwerkkommunikation nur bytes-Strings verwenden. Wichtig ist auch, dass der Typ der aus einer Datei eingelesenen Daten nun vom Modus abhängt, in dem die Datei geöffnet wurde. Der Unterschied zwischen Binär- und Textmodus ist in Python 3 also auch unter Betriebssystemen von Interesse, die diese beiden Modi von sich aus gar nicht unterscheiden.

[»]  Hinweis

Um den Aufwand zum Konvertieren von Code zwischen Python 2.x und Python 3.x zu verringern, ist die Schreibweise u"Hallöchen" für Strings seit Python 3.3 wieder erlaubt. Sie hat allerdings keine besondere Bedeutung, sondern ist äquivalent zu "Hallöchen".

 
Zum Seitenanfang

43.1.4    Ganze Zahlen Zur vorigen ÜberschriftZur nächsten Überschrift

In Python 2 existieren zwei Datentypen zum Speichern ganzer Zahlen:  int für Zahlen im 32- bzw. 64-Bit-Zahlenbereich und long für Zahlen beliebiger Größe. In Python 3 gibt es nur noch einen solchen Datentyp namens int, der sich aber wie long aus Python 2 verhält. Die Unterscheidung zwischen int und long ist auch in Python 2 für den Programmierer im Wesentlichen schon uninteressant, da die beiden Datentypen automatisch ineinander konvertiert werden.

Eine zweite Änderung erfolgt in Bezug auf die Division ganzer Zahlen. In Python 2 wird in diesem Fall eine ganzzahlige Division (Integer-Division) durchgeführt, das Ergebnis ist also wieder eine ganze Zahl. In Python 3 ist das Ergebnis der Division zweier Ganzzahlen eine Gleitkommazahl. Für die Integer-Division existiert hier der Operator //:

Python 2 Python 3
>>> 10 / 4
2
>>> 10 / 4
2.5
>>> 10 // 4
2
>>> 10 // 4
2
>>> 10.0 / 4
2.5
>>> 10.0 / 4
2.5

Tabelle 43.6    Integer-Division

 
Zum Seitenanfang

43.1.5    Exception Handling Zur vorigen ÜberschriftZur nächsten Überschrift

Beim Werfen und Fangen von Exceptions wurden kleinere syntaktische Änderungen durchgeführt. Die alte und die neue Syntax werden in Tabelle 43.7 anhand eines Beispiels einander gegenübergestellt.

Python 2 Python 3
try:
raise SyntaxError, "Hilfe"
except SyntaxError, e:
print e.args
try:
raise SyntaxError("Hilfe")
except SyntaxError as e:
print(e.args)

Tabelle 43.7    Exception Handling

Dabei ist anzumerken, dass die im oben genannte Beispiel unter Python 3 für das Werfen der Exception verwendete Syntax unter Python 2 auch funktioniert. Die unter Python 2 angegebene Syntax ist aber mit Python 3 aus der Sprache entfernt worden.

 
Zum Seitenanfang

43.1.6    Standardbibliothek Zur vorigen ÜberschriftZur nächsten Überschrift

Mit Python 3 wurde auch in der Standardbibliothek gründlich aufgeräumt. Viele Module, die kaum verwendet wurden, sind entfernt worden, andere umbenannt oder mit anderen zu Paketen zusammengefasst. Tabelle 43.8 listet die wichtigsten Module auf, die in Python 3 umbenannt wurden.

Python 2 Python 3
ConfigParser configparser
cPickle _pickle
Queue queue
SocketServer socketserver
repr reprlib
thread _thread

Tabelle 43.8    Umbenannte Module der Standardbibliothek

Die meisten der oben aufgeführten Module werden in diesem Buch nicht thematisiert, da sie sehr speziell sind. Nähere Informationen zu ihnen finden Sie aber in der Onlinedokumentation von Python.

Neben umbenannten Modulen wurden auch einige thematisch zusammengehörige Module zu Paketen zusammengefasst. Diese sind in Tabelle 43.9 aufgelistet.

Paket in Python 3 Module aus Python 2
html HTMLParser, htmlentitydefs
http httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib
tkinter abgesehen von turtle alle Module, die etwas mit Tkinter zu tun haben
urllib urllib, urllib2, urlparse, robotparse
xmlrpc xmlrpclib, DocXMLRPCServer, SimpleXMLRPCServer

Tabelle 43.9    Verschobene Module der Standardbibliothek

 
Zum Seitenanfang

43.1.7    Neue Sprachelemente in Python 3 Zur vorigen ÜberschriftZur nächsten Überschrift

Mit Python 3 wurde eine Reihe neuer Sprachelemente in die Sprache aufgenommen, die wir in Tabelle 43.10 kurz auflisten möchten. In der zweiten Spalte finden Sie einen Verweis, in welchem Abschnitt dieses Buchs die Neuerung besprochen wird.

Sprachelement Abschnitt
Literal für Oktal- und Binärzahlen 12.4.1
Literal für Mengen 15.1
nonlocal-Anweisung 19.3.4
Dict- und Set Comprehensions 23.1
with-Anweisung 24.1
Function Annotations 19.6

Tabelle 43.10    Neue Sprachelemente

 


Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Python 3 Python 3
Jetzt Buch bestellen

 Buchempfehlungen
Zum Rheinwerk-Shop: Einstieg in Python
Einstieg in Python


Zum Rheinwerk-Shop: Python. Der Grundkurs
Python. Der Grundkurs


Zum Rheinwerk-Shop: Algorithmen mit Python
Algorithmen mit Python


Zum Rheinwerk-Shop: Objektorientierte Programmierung
Objektorientierte Programmierung


Zum Rheinwerk-Shop: Raspberry Pi. Das umfassende Handbuch
Raspberry Pi. Das umfassende Handbuch


Zum Rheinwerk-Shop: Roboter-Autos mit dem Raspberry Pi
Roboter-Autos mit dem Raspberry Pi


Zum Rheinwerk-Shop: Neuronale Netze programmieren mit Python
Neuronale Netze programmieren mit Python


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2020
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 
[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern