Leseprobe - Amazon Web Services

Werbung
Wissen, wie’s geht.
Leseprobe
Dieses Handbuch ist randvoll mit Entwicklerwissen zu Python. In
diesem Auszug erfahren Sie Grundlagen von Python und erhalten
einen ersten Einblick in fortgeschrittene Programmiertechniken.
Außerdem enthält diese Leseprobe das Inhaltsverzeichnis und das
gesamte Stichwortverzeichnis des Buchs.
»Die Programmiersprache Python«
»Erste Schritte im interaktiven Modus«
»Der Weg zum ersten Programm«
»Funktionen«
Inhalt
Index
Die Autoren
Leseprobe weiterempfehlen
Johannes Ernesti, Peter Kaiser
Python 3 – Das umfassende Handbuch
1.032 Seiten, gebunden, mit CD, 4. Auflage 2015
39,90 Euro, ISBN 978-3-8362-3633-1
www.rheinwerk-verlag.de/3789
Kapitel 2
Die Programmiersprache Python
2
Im vorangegangenen Kapitel haben wir Ihnen einen Überblick über dieses Buch
gegeben und besprochen, in welcher Weise Sie es lesen sollten. Jetzt wenden wir uns
der Programmiersprache Python zu und beginnen mit einer Einführung in die
Geschichte und die grundlegenden Konzepte. Die beiden letzten Abschnitte dieses
Kapitels behandeln die Einsatzmöglichkeiten und -gebiete von Python. Betrachten
Sie dieses Kapitel also als erzählerische Einführung in die Thematik, die den darauffolgenden fachlichen Einstieg vorbereitet.
2.1 Historie, Konzepte, Einsatzgebiete
2.1.1 Geschichte und Entstehung
Die Programmiersprache Python wurde Anfang der 90er-Jahre von dem Niederländer Guido van Rossum am Centrum voor Wiskunde en Informatica (CWI) in
Amsterdam entwickelt. Ursprünglich war sie als Skriptsprache für das verteilte
Betriebssystem Amoeba gedacht. Der Name Python lehnt sich nicht etwa an die
Schlangenart an, sondern ist eine Hommage an die britische Komikertruppe
Monty Python.
Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mitgewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein, dass sie problemlos
einem interessierten Laien ohne Programmiererfahrung beigebracht werden kann.
Die Erfahrung aus positiver und negativer Kritik an ABC nutzte van Rossum für die
Entwicklung von Python. Er schuf damit eine Programmiersprache, die mächtig und
zugleich leicht zu erlernen ist.
Mit der Version 3.0, die im Dezember 2008 erschien, wurde die Sprache von Grund
auf überarbeitet. Dabei sind viele kleine Unschönheiten und Designfehler beseitigt
worden, die man in bisherigen Versionen aufgrund der Abwärtskompatibilität stets
in der Sprache behalten musste.
Mittlerweile hat sich Python zu einer der beliebtesten Programmiersprachen ihres
Typs entwickelt und nimmt bei Popularitätsindizes von Programmiersprachen1
regelmäßig Spitzenpositionen ein.
1 zum Beispiel TIOBE, RedMonk oder PYPL
31
2
Die Programmiersprache Python
Seit 2001 existiert die gemeinnützige Python Software Foundation, die die Rechte am
Python-Code besitzt und Lobbyarbeit für Python betreibt. So organisiert die Python
Software Foundation beispielsweise die PyCon-Konferenz, die jährlich in den USA
stattfindet. Auch in Europa finden regelmäßig größere und kleinere Python-Konferenzen statt.
2.1.2 Grundlegende Konzepte
Grundsätzlich handelt es sich bei Python um eine imperative Programmiersprache,
die jedoch noch weitere Programmierparadigmen in sich vereint. So ist es beispielsweise möglich, mit Python objektorientiert und funktional zu programmieren. Sollten Sie mit diesen Begriffen im Moment noch nichts anfangen können, seien Sie
unbesorgt, schließlich sollen Sie ja die Programmierung mit Python und damit die
Anwendung der verschiedenen Paradigmen in diesem Buch lernen.
Obwohl Python viele Sprachelemente gängiger Skriptsprachen implementiert, handelt es sich um eine interpretierte Programmiersprache. Der Unterschied zwischen
einer Programmier- und einer Skriptsprache liegt im Compiler. Ähnlich wie Java oder
C# verfügt Python über einen Compiler, der aus dem Quelltext ein Kompilat erzeugt,
den sogenannten Byte-Code. Dieser Byte-Code wird dann in einer virtuellen Maschine, dem Python-Interpreter, ausgeführt.
Ein weiteres Konzept, das Python zum Beispiel mit Java gemeinsam hat, ist die Plattformunabhängigkeit. Ein Python-Programm ist auf allen Betriebssystemen unmodifiziert lauffähig, die vom Python-Interpreter unterstützt werden. Darunter fallen
insbesondere die drei großen Desktop-Betriebssysteme Windows, Linux und OS X.
Im Lieferumfang von Python ist neben dem Interpreter und dem Compiler eine
umfangreiche Standardbibliothek enthalten. Diese Standardbibliothek ermöglicht es
dem Programmierer, in kurzer Zeit übersichtliche Programme zu schreiben, die sehr
komplexe Aufgaben erledigen können. So bietet Python beispielsweise umfassende
Möglichkeiten zur Netzwerkkommunikation oder zur Datenspeicherung. Da die
Standardbibliothek die Programmiermöglichkeiten in Python wesentlich bereichert,
widmen wir ihr im dritten und teilweise auch vierten Teil dieses Buches besondere
Aufmerksamkeit.
Ein Nachteil der Programmiersprache ABC, den van Rossum bei der Entwicklung von
Python beheben wollte, war ihre fehlende Flexibilität. Ein grundlegendes Konzept
von Python ist es daher, es dem Programmierer so einfach wie möglich zu machen,
die Standardbibliothek beliebig zu erweitern. Da Python selbst, als interpretierte Programmiersprache, nur eingeschränkte Möglichkeiten zur maschinennahen Programmierung bietet, können maschinennahe oder zeitkritische Erweiterungen
problemlos in C geschrieben werden. Das ermöglicht die Python API.
32
2.1 Historie, Konzepte, Einsatzgebiete
In Abbildung 2.1 ist das Zusammenwirken der bisher angesprochenen Konzepte
Pythons zusammengefasst: Ein Python-Programm wird vom Python-Interpreter
ausgeführt, der dabei eine umfangreiche Standardbibliothek bereitstellt, die vom
Programm verwendet werden kann. Außerdem erlaubt es die Python API einem
externen C-Programm, den Interpreter zu verwenden oder zu erweitern.
Das Python-Programm
wird vom Interpreter
ausgeführt.
Python-Programm
Dabei wird eine umfangreiche
Standardbibliothek zur Verfügung
gestellt, die das Programm
verwenden kann.
Standardbibliothek
Python-Interpreter
Python API
Python kann über die Python API
durch C-Programme erweitert oder
von diesen verwendet werden.
C-Programm
Betriebssystem
Der Interpreter abstrahiert
vom Betriebssystem und
der Hardware.
Hardware
Abbildung 2.1 Veranschaulichung der grundlegenden Konzepte Pythons
Als letztes grundlegendes Konzept von Python soll erwähnt werden, dass Python
unter der PSF-Lizenz steht. Das ist eine von der Python Software Foundation entworfene Lizenz für Open-Source-Software, die wesentlich weniger restriktiv ist als beispielsweise die GNU General Public License. So erlaubt es die PSF-Lizenz, den PythonInterpreter lizenzkostenfrei in Anwendungen einzubetten und mit diesen auszuliefern, ohne dass der Code offengelegt werden muss oder Lizenzkosten anfallen. Diese
Politik macht Python auch für kommerzielle Anwendungen attraktiv.
2.1.3 Einsatzmöglichkeiten und Stärken
Die größte Stärke von Python ist Flexibilität. So kann Python beispielsweise als Programmiersprache für kleine und große Applikationen, als serverseitige Programmiersprache im Internet oder als Skriptsprache für eine größere C- oder C++Anwendung verwendet werden. Auch abseits des klassischen Marktes breitet sich
Python beispielsweise im Embedded-Bereich aus. So existieren Python-Interpreter
für diverse Smartphone- bzw. Tablet-Systeme oder beispielsweise den Raspberry Pi.
Python ist aufgrund seiner einfachen Syntax leicht zu erlernen und gut zu lesen.
Außerdem erlauben es die automatische Speicherverwaltung und die umfangreiche
33
2
2
Die Programmiersprache Python
Standardbibliothek, mit kleinen Programmen bereits sehr komplexe Probleme anzugehen. Aus diesem Grund eignet sich Python auch zum Rapid Prototyping. Bei dieser
Art der Entwicklung geht es darum, in möglichst kurzer Zeit einen lauffähigen Prototyp als eine Art Machbarkeitsstudie einer größeren Software zu erstellen, die dann
später in einer anderen Programmiersprache implementiert werden soll. Mithilfe
eines solchen Prototyps lassen sich Probleme und Designfehler bereits entdecken,
bevor die tatsächliche Entwicklung der Software begonnen wird.
Eine weitere Stärke Pythons ist die bereits im vorangegangenen Abschnitt angesprochene Erweiterbarkeit. Aufgrund dieser Erweiterbarkeit können Python-Entwickler
aus einem reichen Fundus von Drittanbieterbibliotheken schöpfen. So gibt es etwa
Anbindungen an die gängigsten GUI-Toolkits, die das Erstellen von Python-Programmen mit grafischer Benutzeroberfläche ermöglichen.
2.1.4 Einsatzbeispiele
Python erfreut sich großer Bekanntheit und Verbreitung sowohl bei Softwarefirmen
als auch in der Open-Source-Gemeinschaft. Die Palette der Produkte, die zumindest
zum Teil in Python geschrieben wurden, reicht von Webanwendungen (Google Mail,
Google Maps, YouTube, Dropbox, reddit) über Filesharing-Plattformen (BitTorrent,
Morpheus) und Entwicklungswerkzeuge (Mercurial, SCons) bis hin zu Computerspielen (Civilization IV, Battlefield 2, Eve Online).
2.2
Die Verwendung von Python
aktive Modus ist damit unter anderem zum Lernen der Sprache Python interessant
und wird deshalb in diesem Buch häufig verwendet.
Abbildung 2.2 Python im interaktiven Modus (Python-Shell)
Bei IDLE (Integrated DeveLopment Environment) handelt es sich um eine rudimentäre Python-Entwicklungsumgebung mit grafischer Benutzeroberfläche. Beim
Starten von IDLE wird zunächst nur ein Fenster geöffnet, das eine Python-Shell beinhaltet. Zudem kann über den Menüpunkt File • New Window eine neue PythonProgrammdatei erstellt und editiert werden. Nachdem die Programmdatei gespeichert wurde, kann sie über den Menüpunkt Run • Run Module in der Python-Shell
von IDLE ausgeführt werden. Abgesehen davon, bietet IDLE dem Programmierer einige Komfortfunktionen wie beispielsweise das farbige Hervorheben von Code-Elementen (»Syntax Highlighting«) oder eine automatische Code-Vervollständigung.
Viele Anwendungen unterstützen Python als Skriptsprache für Erweiterungen. Beispiele dafür sind die Grafikanwendungen Maya, Blender, Cinema 4D, Paint Shop Pro
und GIMP.
Neben den genannten gibt es unzählige weitere bekannte Anwendungen, die in
Python geschrieben wurden oder in deren Umfeld Python eingesetzt wird. Lassen Sie
sich anhand der oben dargestellten Beispiele sagen, dass Python eine beliebte, verbreitete und moderne Programmiersprache ist, die es sich lohnt zu erlernen.
2.2 Die Verwendung von Python
Die jeweils aktuelle Version von Python können Sie von der offiziellen Python-Website unter http://www.python.org als Installationsdatei für Ihr Betriebssystem herunterladen und installieren. Alternativ finden Sie Python 3.4 auf der CD, die diesem
Buch beiliegt.
Grundsätzlich werden, wenn man einmal von Python selbst absieht, zwei wichtige
Komponenten installiert: der interaktive Modus und IDLE.
Im sogenannten interaktiven Modus, auch Python-Shell genannt, können einzelne
Programmzeilen eingegeben und die Ergebnisse direkt betrachtet werden. Der inter-
34
Abbildung 2.3 Die Entwicklungsumgebung IDLE
Wenn Sie mit IDLE nicht zufrieden sind, finden Sie eine Übersicht über die verbreitetsten Python-Entwicklungsumgebungen im Anhang dieses Buches. Zudem erhalten Sie auf der offiziellen Python-Website unter http://wiki.python.org/moin/
PythonEditors eine umfassende Auflistung von Entwicklungsumgebungen und Editoren für Python.
35
2
2
Die Programmiersprache Python
Die folgenden Abschnitte geben Ihnen eine kurze Einführung dazu, wie Sie den interaktiven Modus und IDLE auf Ihrem System starten und verwenden.
2.2.1 Windows
Sie finden die Windows-Installationsdatei von Python 3.4 auf der dem Buch beigelegten CD-ROM.
Nach der Installation von Python unter Windows sehen Sie im Wesentlichen zwei
neue Einträge im Startmenü: Python (command line) und IDLE (Python GUI).
Ersterer startet den interaktiven Modus von Python in der Kommandozeile
(»schwarzes Fenster«) und Letzterer die grafische Entwicklungsumgebung IDLE.
2.2.2 Linux
Beachten Sie, dass Python bei vielen Linux-Distributionen bereits im Lieferumfang
enthalten ist. Die meisten Distributionen werden dabei standardmäßig Python 2.x
mitbringen. Python 3.4 muss eventuell über den Paketmanager Ihrer Distribution
nachinstalliert werden. Die beiden Versionen können aber problemlos gleichzeitig
installiert sein.
Sollten Sie eine Distribution ohne Paketmanager einsetzen oder sollte Python 3.4
nicht verfügbar sein, müssen Sie den Quellcode von Python selbst kompilieren und
installieren. Dazu können Sie den Anweisungen der im Quelltext enthaltenen
Readme-Datei folgen.
Sie finden den Quellcode von Python 3.4 auf der dem Buch beigelegten CD-ROM.
Nach der Installation starten Sie den interaktiven Modus bzw. IDLE aus einer Shell
heraus mit den Befehlen python bzw. idle.
Hinweis
Bei vielen Distributionen werden Sie Python 3.x mit einem anderen Befehl, beispielsweise python3, starten müssen, da diese Python 2.x und 3.x parallel installieren.
2.2.3 OS X
Sie finden die Installationsdatei für OS X von Python 3.4 auf der dem Buch beigelegten CD-ROM.
Nach der Installation von Python starten Sie den interaktiven Modus und IDLE, ähnlich wie bei Linux, aus einer Terminal-Sitzung heraus mit den Befehlen python3 bzw.
idle.
36
TEIL I
Einstieg in Python
Herzlich willkommen im ersten Teil dieses Buches. Hier finden Sie eine
einsteigerfreundliche Einführung in die grundlegenden Elemente von
Python. Wir beginnen damit, einfache Kommandos im interaktiven
Modus auszuprobieren, und wenden das erworbene Wissen danach in
einem ersten einfachen Beispielprogramm an. Es folgen Kapitel zu den
grundlegenden Kontrollstrukturen und eine Einführung in das Python
zugrunde liegende Laufzeitmodell. Abschließend finden Sie als Übergang
zum zweiten Teil ein Kapitel zur Verwendung von Funktionen, Methoden
und Attributen.
Kapitel 3
Erste Schritte im interaktiven Modus
Startet man den Python-Interpreter ohne Argumente, gelangt man in den sogenannten interaktiven Modus. Dieser Modus bietet dem Programmierer die Möglichkeit,
Kommandos direkt an den Interpreter zu senden, ohne zuvor ein Programm erstellen zu müssen. Der interaktive Modus wird häufig genutzt, um schnell etwas auszuprobieren oder zu testen. Zum Schreiben wirklicher Programme ist er allerdings
nicht geeignet. Dennoch möchten wir hier mit dem interaktiven Modus beginnen,
da er Ihnen einen schnellen und unkomplizierten Einstieg in die Sprache Python
ermöglicht.
Dieser Abschnitt soll Sie mit einigen Grundlagen vertraut machen, die zum Verständnis der folgenden Kapitel wichtig sind. Am besten setzen Sie die Beispiele dieses
Kapitels am Rechner parallel zu Ihrer Lektüre um.
Zur Begrüßung gibt der Interpreter einige Zeilen aus, die Sie in ähnlicher Form jetzt
auch vor sich haben müssten:
Python 3.4.1 (default, May 19 2014, 17:23:49)
[GCC 4.9.0 20140507 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Nach der Eingabeaufforderung (>>>) kann beliebiger Python-Code eingegeben werden. Bei Zeilen, die nicht mit >>> beginnen, handelt es sich um Ausgaben des Interpreters.
Zur Bedienung des interaktiven Modus sei noch gesagt, dass er über eine HistoryFunktion verfügt. Das heißt, dass Sie über die (ì)- und (ë)-Tasten alte Eingaben
wieder hervorholen können und nicht erneut eingeben müssen. Auch das Verändern
der hervorgeholten Eingaben ist möglich.
Wir beginnen mit der Einführung einiger grundlegender Datentypen. Dabei beschränken wir uns zunächst auf ganze Zahlen, Gleitkommazahlen, Zeichenketten,
Listen und Dictionarys. Es gibt dabei bestimmte Regeln, nach denen man Instanzen
dieser Datentypen, beispielsweise einen Zahlenwert oder eine Zeichenkette, zu
schreiben hat, damit diese vom Interpreter erkannt werden. Eine solche Schreibweise
nennt man Literal.
39
3
3
Erste Schritte im interaktiven Modus
3.1 Ganze Zahlen
Als erstes und einfachstes Beispiel erzeugen wir im interaktiven Modus eine ganze
Zahl. Der Interpreter antwortet darauf, indem er ihren Wert ausgibt:
>>> -9
-9
>>> 1139
1139
>>> +12
12
Das Literal für eine ganze Zahl besteht dabei aus den Ziffern 0 bis 9. Zudem kann ein
positives oder negatives Vorzeichen vorangestellt werden. Eine Zahl ohne Vorzeichen wird stets als positiv angenommen.
Es ist möglich, mehrere ganze Zahlen durch Operatoren wie +, -, * oder / zu einem
Term zu verbinden. In diesem Fall antwortet der Interpreter mit dem Wert des Terms:
>>> 5 + 9
14
>>> 5 * -9
-45
Wie Sie sehen, lässt sich Python ganz intuitiv als eine Art Taschenrechner verwenden.
Das nächste Beispiel ist etwas komplexer und umfasst gleich mehrere miteinander
verknüpfte Rechenoperationen:
>>> (21 - 3) * 9 + 6
168
>>> 21 - 3 * 9 + 6
0
Hier zeigt sich, dass der Interpreter die gewohnten mathematischen Rechengesetze
anwendet und das erwartete Ergebnis ausgibt. Das Divisionsergebnis zweier ganzer
Zahlen ist nicht zwingend wieder eine ganze Zahl, weswegen der Divisionsoperator
das Ergebnis stets als Gleitkommazahl zurückgibt:
>>> 3/2
1.5
>>> 2/3
0.6666666666666666
>>> 4/4
1.0
40
3.2
Gleitkommazahlen
Hinweis
Diese Eigenschaft unterscheidet Python von vielen anderen Programmiersprachen.
Dort wird bei der Division zweier ganzer Zahlen eine ganzzahlige Division durchgeführt und das Ergebnis ebenfalls als ganze Zahl zurückgegeben. Diese sogenannte
Integer-Division1 wurde in Python-Versionen vor 3.0 auch angewendet.
3
3.2 Gleitkommazahlen
Das Literal für eine Gleitkommazahl besteht aus einem Vorkommaanteil, einem
Dezimalpunkt und einem Nachkommaanteil. Wie schon bei den ganzen Zahlen ist es
möglich, ein Vorzeichen anzugeben:
>>> 0.5
0.5
>>> -123.456
-123.456
>>> +1.337
1.337
Beachten Sie, dass es sich bei dem Dezimaltrennzeichen um einen Punkt handeln
muss. Die in Deutschland übliche Schreibweise mit einem Komma ist nicht zulässig.
Gleitkommazahlen lassen sich ebenso intuitiv in Termen verwenden wie die ganzen
Zahlen:
>>> 1.5 / 2.1
0.7142857142857143
So viel zunächst zu ganzen numerischen Datentypen. Im zweiten Teil des Buches
werden wir auf diese grundlegenden Datentypen zurückkommen und sie in aller
Ausführlichkeit behandeln. Doch nun zu einem weiteren wichtigen Datentyp, den
Zeichenketten.
1 Die Integer-Division kann durchaus ein gewünschtes Verhalten sein, führt aber gerade bei
Programmieranfängern häufig zu Verwirrung und wurde deshalb in Python 3.0 abgeschafft.
Wenn Sie eine Integer-Division in Python 3 durchführen möchten, müssen Sie den Operator
// verwenden:
>>> 3//2
1
>>> 2//3
0
41
3
Erste Schritte im interaktiven Modus
3.3 Zeichenketten
Neben den Zahlen sind Zeichenketten, auch Strings genannt, von entscheidender
Bedeutung. Strings ermöglichen es, Text vom Benutzer einzulesen, zu speichern, zu
bearbeiten oder auszugeben.
Um einen String zu erzeugen, wird der zugehörige Text in doppelte Hochkommata
geschrieben:
>>> "Hallo Welt"
'Hallo Welt'
>>> "abc123"
'abc123'
Die einfachen Hochkommata, die der Interpreter verwendet, um den Wert eines
Strings auszugeben, sind eine äquivalente Schreibweise zu den von uns verwendeten
doppelten Hochkommata, die Sie auch benutzen dürfen:
>>> 'Hallo Welt'
'Hallo Welt'
Ähnlich wie bei Ganz- und Gleitkommazahlen gibt es auch Operatoren für Strings. So
fügt der Operator + beispielsweise zwei Strings zusammen:
>>> "Hallo" + " " + "Welt"
'Hallo Welt'
3.4 Listen
Wenden wir uns nun den Listen zu. Eine Liste ist eine geordnete Ansammlung von
Elementen beliebigen Datentyps. Um eine Liste zu erzeugen, werden die Literale
der Werte, die sie enthalten soll, durch Kommata getrennt in eckige Klammern
geschrieben:
>>> [1,2,3]
[1, 2, 3]
>>> ["Dies", "ist", "eine", "Liste"]
['Dies', 'ist', 'eine', 'Liste']
Die Elemente einer Liste müssen nicht alle den gleichen Typ haben und können insbesondere selbst wieder Listen sein, wie folgendes Beispiel zeigt:
3.5 Dictionarys
Ähnlich wie Strings lassen sich Listen mit dem Operator + um Elemente erweitern, +
bildet die Aneinanderreihung zweier Listen.
>>> [1,2,3] + ["Python", "ist", "super"]
[1, 2, 3, 'Python', 'ist', 'super']
3
3.5 Dictionarys
Der fünfte und letzte Datentyp, den Sie an dieser Stelle kennenlernen, ist das Dictionary (dt. Wörterbuch). Ein Dictionary speichert Zuordnungen von Schlüsseln zu Werten. Um ein Dictionary zu erzeugen, werden die Schlüssel/Wert-Paare durch
Kommata getrennt in geschweifte Klammern geschrieben. Zwischen einem Schlüssel und dem zugehörigen Wert steht dabei ein Doppelpunkt:
>>> d = {"schlüssel1" : "wert1", "schlüssel2" : "wert2"}
Über einen Schlüssel können Sie auf den dahinterliegenden Wert zugreifen. Dazu
werden ähnlich wie bei den Listen eckige Klammern verwendet:
>>> d["schlüssel1"]
'wert1'
>>> d["schlüssel2"]
'wert2'
Über diese Zugriffsoperation können Sie auch Werte modifizieren bzw. neue Schlüssel/Wert-Paare in das Dictionary eintragen:
>>> d["schlüssel2"] = "wert2.1"
>>> d["schlüssel2"]
'wert2.1'
>>> d["schlüssel3"] = "wert3"
>>> d["schlüssel3"]
'wert3'
Sowohl Schlüssel, als auch Werte können andere Datentypen haben, als die an dieser
Stelle verwendeten Strings. Darauf werden wir zu gegebener Zeit zurückkommen.
Auf der in den vorangegangenen Abschnitten vorgestellten grundlegenden Darstellung der fünf Datentypen Ganzzahl, Gleitkommazahl, String, Liste und Dictionary
werden wir in den folgenden Abschnitten aufbauen, bis wir im zweiten Teil des
Buches ausführlich auf alle in Python eingebauten Datentypen eingehen werden.
>>> ["Python", 1, 2, -7 / 4, [1,2,3]]
['Python', 1, 2, -1.75, [1, 2, 3]]
42
43
3
Erste Schritte im interaktiven Modus
3.6 Variablen
Es ist in Python möglich, einer Zahl oder Zeichenkette einen Namen zu geben. Dazu
werden der Name auf der linken und das entsprechende Literal auf der rechten Seite
eines Gleichheitszeichens geschrieben. Eine solche Operation wird Zuweisung genannt.
>>>
>>>
>>>
>>>
name = 0.5
var123 = 12
string = "Hallo Welt!"
liste = [1,2,3]
Die mit den Namen verknüpften Werte können später ausgegeben oder in Berechnungen verwendet werden, indem der Name anstelle des jeweiligen Wertes eingegeben wird:
>>> name
0.5
>>> 2 * name
1.0
>>> (var123 + var123) / 3
8
>>> var123 + name
12.5
Es ist genauso möglich, dem Ergebnis einer Berechnung einen Namen zu geben:
>>> a = 1 + 2
>>> b = var123 / 4
Dabei wird immer zuerst die Seite rechts vom Gleichheitszeichen ausgewertet. So
wird beispielsweise bei der Anweisung a = 1 + 2 stets zuerst das Ergebnis von 1 + 2
bestimmt, bevor dem entstandenen Wert ein Name zugewiesen wird.
Hinweis
Beachten Sie bei der Verwendung von Variablen, dass Python case sensitive ist. Dies
bedeutet, dass bei Bezeichnern zwischen Groß- und Kleinschreibung unterschieden
wird. In der Praxis heißt das, dass die Bezeichner otto und Otto nicht identisch sind,
sondern zwei verschiedene Werte haben können.
Ein Variablenname, auch Bezeichner genannt, darf seit Python-Version 3.0 aus
nahezu beliebigen Buchstaben und dem Unterstrich bestehen. Nach mindestens
einem führenden Buchstaben oder Unterstrich dürfen auch Ziffern verwendet wer-
44
3.6
Variablen
den.2 Beachten Sie, dass auch Umlaute und spezielle Buchstaben anderer Sprachen
erlaubt sind, wie folgendes Beispiel zeigt:
>>> äöüßéè = 123
>>> äöüßéè
123
3
Solche Freiheiten, was Bezeichner angeht, finden sich in anderen Programmiersprachen selten. Nicht zuletzt deshalb empfehlen wir Ihnen, sich auf das englische Alphabet zu beschränken. Die fehlenden Umlaute und das ß fallen auch bei deutschen
Bezeichnern kaum ins Gewicht und wirken im Quellcode eher verwirrend als natürlich.
Bestimmte Schlüsselwörter 3 sind in Python für die Sprache selbst reserviert und dürfen nicht als Bezeichner verwendet werden. Die folgende Tabelle gibt Ihnen eine
Übersicht über alle in Python reservierten Wörter.
and
as
assert
break
class
continue
def
del
elif
else
except
False
finally
for
from
global
if
import
in
is
lambda
None
nonlocal
not
or
pass
raise
return
True
try
while
with
yield
Tabelle 3.1 Schlüsselwörter in Python
Zum Schluss möchten wir noch einen weiteren Begriff einführen: Alles, was mit
numerischen Literalen – also Ganz- oder Gleitkommazahlen, Variablen und Operatoren – formuliert werden kann, wird als arithmetischer Ausdruck bezeichnet. Ein solcher Ausdruck kann also so aussehen:
(a * a + b) / 12
Alle bisher eingeführten Operatoren +, -, * und / werden daher als arithmetische Operatoren bezeichnet.
2 Häufig werden Variablen, die nur eine lokale und kurzfristige Bedeutung haben, mit einem kurzen, oft einbuchstabigen Namen versehen. Dabei sollten Sie beachten, dass die Buchstaben »o«,
»O«, »I« und »l« in manchen Schriftarten wie Zahlen aussehen und damit für einen Variablennamen ungeeignet sind.
3 Unter einem Schlüsselwort versteht man in der Programmierung ein Wort, das eine bestimmte
Bedeutung trägt, beispielsweise den Programmablauf steuert. In Python existieren zum Beispiel
die Schlüsselworte if und for, die eine Fallunterscheidung bzw. eine Schleife einleiten.
45
3
Erste Schritte im interaktiven Modus
3.7 Logische Ausdrücke
Neben den arithmetischen Operatoren gibt es einen zweiten Satz von Operatoren,
die das Vergleichen von Zahlen ermöglichen:
>>> 3 < 4
True
Hier wird getestet, ob 3 kleiner ist als 4. Auf solche Vergleiche antwortet der Interpreter mit einem Wahrheitswert, also mit True (dt. »wahr«) oder False (dt. »falsch«). Ein
Vergleich wird mithilfe eines sogenannten Vergleichsoperators, in diesem Fall <,
durchgeführt.
Die folgende Tabelle führt die Vergleichsoperatoren auf:
Vergleich
Bedeutung
3 == 4
Ist 3 gleich 4? Beachten Sie das doppelte Gleichheitszeichen, das
den Vergleich von einer Zuweisung unterscheidet.
3 != 4
Ist 3 ungleich 4?
3<4
Ist 3 kleiner als 4?
3>4
Ist 3 größer als 4?
3 <= 4
Ist 3 kleiner oder gleich 4?
3 >= 4
Ist 3 größer oder gleich 4?
Tabelle 3.2 Vergleiche in Python
Allgemein kann für 3 und 4 ein beliebiger arithmetischer Ausdruck eingesetzt werden. Wenn zwei arithmetische Ausdrücke durch einen der oben genannten Operatoren miteinander verglichen werden, erzeugt man einen logischen Ausdruck:
(a - 7) < (b * b + 6.5)
Neben den bereits eingeführten arithmetischen Operatoren gibt es drei logische
Operatoren, mit denen Sie das Ergebnis eines logischen Ausdrucks verändern oder
zwei logische Ausdrücke miteinander verknüpfen können.
3.8 Funktionen und Methoden
Der Operator and bekommt zwei logische Ausdrücke als Operanden und ergibt nur
dann True, wenn sowohl der erste Ausdruck als auch der zweite True ergeben haben.
Er entspricht damit der umgangssprachlichen »Und«-Verknüpfung zweier Satzteile.
Im Beispiel kann dies so aussehen:
>>> (3 < 4) and (5 < 6)
True
>>> (3 < 4) and (4 < 3)
False
Der Operator or entspricht dem umgangssprachlichen »oder«. Er bekommt zwei
logische Ausdrücke als Operanden und ergibt nur dann False, wenn sowohl der erste
Ausdruck als auch der zweite False ergeben haben. Der Operator ergibt also True,
wenn mindestens einer seiner Operanden True ergeben hat:
>>> (3 < 4) or (5 < 6)
True
>>> (3 < 4) or (4 < 3)
True
>>> (5 > 6) or (4 < 3)
False
Wir haben der Einfachheit halber hier nur Zahlen miteinander verglichen. Selbstverständlich ergibt ein solcher Vergleich nur dann einen Sinn, wenn komplexere arithmetische Ausdrücke miteinander verglichen werden. Durch die vergleichenden
Operatoren und die drei booleschen Operatoren not, and und or können schon sehr
komplexe Vergleiche erstellt werden.
Hinweis
Beachten Sie, dass bei allen Beispielen aus Gründen der Übersicht Klammern gesetzt
wurden. Durch Prioritätsregelungen der Operatoren untereinander sind diese überflüssig. Das bedeutet, dass jedes hier vorgestellte Beispiel auch ohne Klammern wie
erwartet funktionieren würde. Trotzdem ist es gerade am Anfang sinnvoll, durch
Klammerung die Zugehörigkeiten visuell eindeutig zu gestalten. Eine Tabelle mit den
Prioritätsregeln für Operatoren, der sogenannten Operatorrangfolge, finden Sie in
Kapitel 11, »Operatoren«.
Der Operator not kehrt das Ergebnis eines Vergleichs um, macht also aus True False
und aus False True. Der Ausdruck not (3 < 4) ist also das Gleiche wie 3 >= 4:
>>> not (3 < 4)
False
>>> not (4 < 3)
True
46
3.8 Funktionen und Methoden
In diesem Abschnitt vermitteln wir Ihnen ein grundlegendes Wissen über Funktionen und einige Konzepte der objektorientierten Programmierung. Dabei beschrän-
47
3
3
Erste Schritte im interaktiven Modus
ken wir uns auf die Aspekte, die in den folgenden Kapiteln benötigt werden. Beide
Themen werden in Kapitel 19 bzw. Kapitel 21 noch einmal ausführlich behandelt.
3.8.1 Funktionen
In Python können Teile eines Programms in Funktionen gekapselt und danach über
einen Funktionsaufruf ausgeführt werden. Das Ziel dieses Vorgehens ist es, Redundanz im Quellcode zu vermeiden. Funktionalität, die häufig benötigt wird, sollte stets
nur einmal als Funktion implementiert und dann als solche im weiteren Programm
verwendet werden. Außerdem kann der Einsatz von Funktionen die Les- und Wartbarkeit des Quellcodes deutlich erhöhen.
Python bietet einen Satz eingebauter Funktionen (Built-in Functions), die der Programmierer zu jeder Zeit verwenden kann. Als Beispiel dient in diesem Abschnitt die
eingebaute Funktion max, die das größte Element einer Liste bestimmt:
>>> max([1,5,2,7,9,3])
9
Eine Funktion wird aufgerufen, indem man den Funktionsnamen, gefolgt von den
Funktionsparametern in Klammern, schreibt. Im Beispiel erwartet die Funktion max
genau einen Parameter, nämlich eine Liste der zu betrachtenden Werte. Das Ergebnis
der Berechnung wird als Rückgabewert der Funktion zurückgegeben. Sie können sich
vorstellen, dass der Funktionsaufruf im Quelltext durch den Rückgabewert ersetzt
wird.
Es gibt eine Variante der Funktion max, die anstelle des größten Elements einer Liste
den größten ihr übergebenen Parameter bestimmt. Um einer Funktion mehrere
Parameter zu übergeben, werden diese beim Funktionsaufruf durch Kommata getrennt in die Klammern geschrieben:
>>> max(1,5,3)
5
Selbstverständlich können Sie in Python eigene Funktionen definieren, an dieser
Stelle genügt es jedoch, zu wissen, wie bereits vorhandene Funktionen verwendet
werden können. In Kapitel 19 kommen wir noch einmal ausführlich auf Funktionen
zu sprechen.
3.8.2 Methoden
Das Erzeugen eines Wertes eines bestimmten Datentyps, etwa das Erzeugen einer
ganzen Zahl über ihr Literal, wird Instanziieren genannt und der entstandene Wert
48
3.9 Bildschirmausgaben
Instanz. So ist beispielsweise 1 eine Instanz des Datentyps »ganze Zahl« oder [4,5,6]
eine Instanz des Datentyps »Liste«. Der Datentyp einer Instanz legt einerseits fest,
welche Daten gespeichert werden, und definiert andererseits einen Satz von Operationen, die auf diesen Daten durchgeführt werden können. Ein Teil dieser Operationen wird durch Operatoren abgebildet, so bietet beispielsweise der Datentyp
»Gleitkommazahl« den Operator + zum Addieren zweier Gleitkommazahlen an. Für
die einfachen numerischen Datentypen sind einige wenige Operatoren ausreichend,
um mit ihnen arbeiten zu können. Bei komplexeren Datentypen, beispielsweise den
Listen, ist eine ganze Reihe von Operationen denkbar, die allein über Operatoren
nicht abgebildet werden können. Für solche Fälle können Datentypen Methoden
definieren. Dabei handelt es sich um Funktionen, die im Kontext einer bestimmten
Instanz ausgeführt werden.
Der Datentyp »Liste« bietet zum Beispiel eine Methode sort an, mit deren Hilfe eine
Liste sortiert werden kann. Um eine Methode aufzurufen, wird eine Instanz (oder
eine Referenz darauf), gefolgt von einem Punkt und dem Methodenaufruf, geschrieben. Dieser ist wie ein Funktionsaufruf aufgebaut:
>>>
>>>
>>>
[2,
liste = [2,7,3,2,7,8,4,2,5]
liste.sort()
liste
2, 2, 3, 4, 5, 7, 7, 8]
Ein weiteres Beispiel bietet die Methode count des Datentyps »String«, die zählt, wie
oft ein Zeichen in einem String vorkommt.
>>> "Hallo Welt".count("l")
3
Das hier erworbene Wissen über Funktionen und Methoden wird zu gegebener Zeit
vertieft. Im Folgenden wird die für den Anfang wohl wichtigste in Python eingebaute
Funktion besprochen: print.
3.9 Bildschirmausgaben
Auch wenn wir hin und wieder auf den interaktiven Modus zurückgreifen werden, ist
es unser Ziel, möglichst schnell echte Python-Programme zu schreiben. Es ist eine
Besonderheit des interaktiven Modus, dass der Wert eines eingegebenen Ausdrucks
automatisch ausgegeben wird. In einem normalen Programm müssen Bildschirmausgaben dagegen vom Programmierer erzeugt werden. Um den Wert einer Variablen auszugeben, wird in Python die Funktion print verwendet:
49
3
3
Erste Schritte im interaktiven Modus
>>> print(1.2)
1.2
Beachten Sie, dass mittels print, im Gegensatz zur automatischen Ausgabe des
interaktiven Modus, nur der Wert an sich ausgegeben wird. So wird bei der automatischen Ausgabe der Wert eines Strings in Hochkommata geschrieben, während
dies bei print nicht der Fall ist:
>>> "Hallo Welt"
'Hallo Welt'
>>> print("Hallo Welt")
Hallo Welt
3.9 Bildschirmausgaben
Hinweis
Die Funktion print wurde in Python 3.0 eingeführt. In früheren Python-Versionen
konnten Bildschirmausgaben über das Schlüsselwort print erzeugt werden:
3
>>> print "Dies", "ist", "Python", 2
Dies ist Python 2
In den meisten Fällen sind die fehlenden Klammern der einzige Unterschied. Näheres
zu den Unterschieden zwischen Python 2 und 3 erfahren Sie in Kapitel 43.
Auch hier ist es problemlos möglich, anstelle eines konstanten Wertes einen Variablennamen zu verwenden:
>>> var = 9
>>> print(var)
9
Oder Sie geben das Ergebnis eines Ausdrucks direkt aus:
>>> print(-3 * 4)
-12
Außerdem ermöglicht print es, mehrere Variablen oder Konstanten in einer Zeile
auszugeben. Dazu werden die Werte durch Kommata getrennt angegeben. Jedes
Komma wird bei der Ausgabe durch ein Leerzeichen ersetzt:
>>> print(-3, 12, "Python rockt")
-3 12 Python rockt
Das ist insbesondere dann hilfreich, wenn Sie nicht nur einzelne Werte, sondern
auch einen kurzen erklärenden Text dazu ausgeben möchten. So etwas können Sie
auf die folgende Weise erreichen:
>>> var = 9
>>> print("Die magische Zahl ist:", var)
Die magische Zahl ist: 9
Abschließend ist noch zu sagen, dass print nach jeder Ausgabe einen Zeilenvorschub
ausgibt. Es wird also stets in eine neue Zeile geschrieben.
50
51
Kapitel 4
Der Weg zum ersten Programm
4
Nachdem wir im interaktiven Modus spielerisch einige Grundelemente der Sprache
Python behandelt haben, möchten wir dieses Wissen jetzt auf ein tatsächliches Programm übertragen. Im Gegensatz zum interaktiven Modus, der eine wechselseitige
Interaktion zwischen Programmierer und Interpreter ermöglicht, wird der Quellcode
eines Programms in eine Datei geschrieben. Diese Datei wird als Ganzes vom Interpreter eingelesen und ausgeführt.
In den folgenden Abschnitten lernen Sie die Grundstrukturen eines Python-Programms kennen und werden Ihr erstes einfaches Beispielprogramm schreiben.
4.1 Tippen, kompilieren, testen
In diesem Abschnitt werden die Arbeitsabläufe besprochen, die nötig sind, um ein
Python-Programm zu erstellen und auszuführen. Ganz allgemein sollten Sie sich
darauf einstellen, dass wir über einen Großteil des Buches ausschließlich Konsolenanwendungen schreiben werden. Eine Konsolenanwendung hat eine rein textbasierte Schnittstelle zum Benutzer und läuft in der Konsole (auch Shell) des jeweiligen
Betriebssystems ab. Für die meisten Beispiele und auch für viele reale Anwendungsfälle reicht eine solche textbasierte Schnittstelle aus.1
Grundsätzlich besteht ein Python-Programm aus einer oder mehreren Programmdateien. Diese Programmdateien haben die Dateiendung .py und enthalten den
Python-Quelltext. Dabei handelt es sich um nichts anderes als um Textdateien. Programmdateien können also mit einem normalen Texteditor bearbeitet werden.
Nachdem eine Programmdatei geschrieben wurde, besteht der nächste Schritt darin,
sie auszuführen. Wenn Sie IDLE verwenden, kann die Programmdatei bequem über
den Menüpunkt Run • Run Module ausgeführt werden. Sollten Sie einen Editor verwenden, der keine vergleichbare Funktion unterstützt, müssen Sie in einer Kommandozeile in das Verzeichnis der Programmdatei wechseln und, abhängig von
Ihrem Betriebssystem, verschiedene Kommandos ausführen.
1 Selbstverständlich ermöglicht Python auch die Programmierung grafischer Benutzeroberflächen. Dies wird in Kapitel 39 behandelt.
53
4
Der Weg zum ersten Programm
Windows
Unter Windows reicht es, den Namen der Programmdatei einzugeben und mit (¢)
zu bestätigen. Im folgenden Beispiel, zu sehen in Abbildung 4.1, wird die Programmdatei programm.py im Ordner C:\Ordner ausgeführt. Dazu müssen Sie ein Konsolenfenster unter Start • Programme • Zubehör • Eingabeaufforderung starten.
4.1
Tippen, kompilieren, testen
Bitte beachten Sie den Hinweis aus Abschnitt 4.1.2, der besagt, dass das Kommando,
mit dem Sie Python 3.4 starten, je nach Distribution von dem hier demonstrierten
python abweichen kann.
4
4.1.1 Shebang
Unter einem Unix-ähnlichen Betriebssystem wie beispielsweise Linux können
Python-Programmdateien mithilfe eines Shebangs, auch Magic Line genannt, direkt
ausführbar gemacht werden. Dazu muss die erste Zeile der Programmdatei in der
Regel folgendermaßen lauten:
#!/usr/bin/python
In diesem Fall wird das Betriebssystem dazu angehalten, diese Programmdatei
immer mit dem Python-Interpreter auszuführen. Unter anderen Betriebssystemen,
beispielsweise Windows, wird die Shebang-Zeile ignoriert.
Abbildung 4.1 Ausführen eines Python-Programms unter Windows
Bei »Dies schreibt Ihnen Ihr Python-Programm« handelt es sich um eine Ausgabe des
Python-Programms in der Datei programm.py, die beweist, dass das Python-Programm tatsächlich ausgeführt wurde.
Hinweis
Unter Windows ist es auch möglich, ein Python-Programm durch einen Doppelklick
auf die jeweilige Programmdatei auszuführen. Das hat aber den Nachteil, dass sich
das Konsolenfenster sofort nach Beenden des Programms schließt und die Ausgaben
des Programms somit nicht erkennbar sind.
Beachten Sie, dass der Python-Interpreter auf Ihrem System in einem anderen Verzeichnis als dem hier angegebenen installiert sein könnte. Allgemein ist daher
folgende Shebang-Zeile besser, da sie vom tatsächlichen Installationsort Pythons unabhängig ist:
#!/usr/bin/env python
Beachten Sie außerdem, dass das Executable-Flag der Programmdatei gesetzt werden
muss, bevor die Datei tatsächlich ausführbar ist. Das geschieht mit dem Befehl
chmod +x dateiname
Die in diesem Buch gezeigten Beispiele enthalten aus Gründen der Übersichtlichkeit
keine Shebang-Zeile. Das bedeutet aber ausdrücklich nicht, dass vom Einsatz einer
Shebang-Zeile abzuraten wäre.
Linux und OS X
4.1.2 Interne Abläufe
Unter Unix-ähnlichen Betriebssystemen wie Linux oder OS X wechseln Sie ebenfalls
in das Verzeichnis, in dem die Programmdatei liegt, und starten dann den PythonInterpreter mit dem Kommando python, gefolgt von dem Namen der auszuführenden Programmdatei. Im folgenden Beispiel wird die Programmdatei programm.py
unter Linux ausgeführt, die sich im Verzeichnis /home/user/ordner befindet:
Bislang haben Sie eine ungefähre Vorstellung davon, was Python ausmacht und wo
die Stärken dieser Programmiersprache liegen. Außerdem haben wir Ihnen das
Grundwissen zum Erstellen und Ausführen einer Python-Programmdatei vermittelt.
Doch in den vorangegangenen Abschnitten sind Begriffe wie »Compiler« oder
»Interpreter« gefallen, ohne erklärt worden zu sein. In diesem Abschnitt möchten
wir uns daher den internen Vorgängen widmen, die beim Ausführen einer PythonProgrammdatei ablaufen. Abbildung 4.2 veranschaulicht, was beim Ausführen einer
Programmdatei namens programm.py geschieht.
user@HOST ~ $ cd ordner
user@HOST ~/ordner $ python programm.py
Dies schreibt Ihnen Ihr Python-Programm
54
55
Der Weg zum ersten Programm
Programmdatei
programm.py
4.2
Grundstruktur eines Python-Programms
ausgeführt werden, für die ein Python-Interpreter existiert. Allerdings laufen Programme interpretierter Programmiersprachen aufgrund des zwischengeschalteten
Interpreters in der Regel auch langsamer als ein vergleichbares C-Programm, das
direkt auf dem Prozessor ausgeführt wird.2
4
Compiler
Byte-Code
programm.pyc
Interpreter
4.2 Grundstruktur eines Python-Programms
Um Ihnen ein Gefühl für die Sprache Python zu vermitteln, möchten wir Ihnen
zunächst einen Überblick über ihre Syntax geben. Das Wort Syntax kommt aus dem
Griechischen und bedeutet »Satzbau«. Unter der Syntax einer Programmiersprache
ist die vollständige Beschreibung erlaubter und verbotener Konstruktionen zu verstehen. Die Syntax wird durch eine Grammatik festgelegt, an die sich der Programmierer zu halten hat. Tut er es nicht, so verursacht er den allseits bekannten Syntax
Error.
Python macht dem Programmierer sehr genaue Vorgaben, wie er seinen Quellcode
zu strukturieren hat. Obwohl erfahrene Programmierer darin eine Einschränkung
sehen mögen, kommt diese Eigenschaft gerade Programmierneulingen zugute, denn
unstrukturierter und unübersichtlicher Code ist eine der größten Fehlerquellen in
der Programmierung.
Grundsätzlich besteht ein Python-Programm aus einzelnen Anweisungen, die im einfachsten Fall genau eine Zeile im Quelltext einnehmen. Folgende Anweisung gibt beispielsweise einen Text auf dem Bildschirm aus:
print("Hallo Welt")
Abbildung 4.2 Kompilieren und Interpretieren einer Programmdatei
Wenn die Programmdatei programm.py, wie zu Beginn des Kapitels beschrieben,
ausgeführt wird, passiert sie zunächst den Compiler. Als Compiler wird ein Programm bezeichnet, das von einer formalen Sprache in eine andere übersetzt. Im Falle
von Python übersetzt der Compiler von der Sprache Python in den Byte-Code. Dabei
steht es dem Compiler frei, den generierten Byte-Code im Arbeitsspeicher zu behalten oder als programm.pyc auf der Festplatte zu speichern.
Beachten Sie, dass der vom Compiler generierte Byte-Code, im Gegensatz etwa zu Coder C++-Kompilaten, nicht direkt auf dem Prozessor ausgeführt werden kann. Zur
Ausführung des Byte-Codes wird eine weitere Abstraktionsschicht, der Interpreter,
benötigt. Der Interpreter, häufig auch virtuelle Maschine (engl. virtual machine)
genannt, liest den vom Compiler erzeugten Byte-Code ein und führt ihn aus.
Dieses Prinzip einer interpretierten Programmiersprache hat verschiedene Vorteile.
So kann derselbe Python-Code beispielsweise unmodifiziert auf allen Plattformen
56
Einige Anweisungen lassen sich in einen Anweisungskopf und einen Anweisungskörper unterteilen, wobei der Körper weitere Anweisungen enthalten kann:
Anweisungskopf :
Anweisung
…
4
Anweisung
Abbildung 4.3 Struktur einer mehrzeiligen Anweisung
2 Zumindest dann, wenn der Interpreter keine Laufzeitoptimierung über eine Just-in-Time-Kompilierung durchführt. Mit PyPy lernen Sie einen solchen Python Interpreter in Abschnitt 35.6.9,
»Alternative Interpreter: PyPy«, kennen.
57
4
Der Weg zum ersten Programm
Das kann in einem konkreten Python-Programm etwa so aussehen:
if x > 10:
print("x ist größer als 10")
print("Zweite Zeile!")
Die Zugehörigkeit des Körpers zum Kopf wird in Python durch einen Doppelpunkt
am Ende des Anweisungskopfes und durch eine tiefere Einrückung des Anweisungskörpers festgelegt. Die Einrückung kann sowohl über Tabulatoren als auch über Leerzeichen erfolgen, wobei Sie gut beraten sind, beides nicht zu vermischen. Wir
empfehlen eine Einrückungstiefe von jeweils vier Leerzeichen.
Python unterscheidet sich hier von vielen gängigen Programmiersprachen, in denen
die Zuordnung von Anweisungskopf und Anweisungskörper durch geschweifte
Klammern oder Schlüsselwörter wie »Begin« und »End« erreicht wird.
Hinweis
Ein Programm, in dem sowohl Leerzeichen als auch Tabulatoren verwendet wurden,
kann vom Python-Compiler anstandslos übersetzt werden, da jeder Tabulator intern
durch acht Leerzeichen ersetzt wird. Dies kann aber zu schwer auffindbaren Fehlern
führen, denn viele Editoren verwenden standardmäßig eine Tabulatorweite von vier
Leerzeichen. Dadurch scheinen bestimmte Quellcodeabschnitte gleich weit eingerückt, obwohl sie es de facto nicht sind. Bitte stellen Sie Ihren Editor so ein, dass jeder
Tabulator automatisch durch Leerzeichen ersetzt wird, oder verwenden Sie ausschließlich Leerzeichen zur Einrückung Ihres Codes.
Möglicherweise fragen Sie sich jetzt, wie Anweisungen, die über mehrere Zeilen
gehen, mit dem interaktiven Modus vereinbar sind, in dem ja immer nur eine Zeile
bearbeitet werden kann. Nun, generell werden wir, wenn ein Code-Beispiel mehrere
Zeilen lang ist, versuchen, den interaktiven Modus zu vermeiden. Dennoch ist die
Frage berechtigt. Die Antwort: Es wird ganz intuitiv zeilenweise eingegeben. Wenn
der Interpreter erkennt, dass eine Anweisung noch nicht vollendet ist, ändert er den
Eingabeprompt von >>> in .... Geben wir einmal unser oben dargestelltes Beispiel in
den interaktiven Modus ein:
>>> x = 123
>>> if x > 10:
...
print("Der Interpreter leistet gute Arbeit")
...
print("Zweite Zeile!")
...
Der Interpreter leistet gute Arbeit
Zweite Zeile!
>>>
58
4.2
Grundstruktur eines Python-Programms
Beachten Sie, dass Sie, auch wenn eine Zeile mit ... beginnt, die aktuelle Einrückungstiefe berücksichtigen müssen. Darüber hinaus kann der Interpreter das
Ende des Anweisungskörpers nicht automatisch erkennen, da dieser beliebig viele
Anweisungen enthalten kann. Deswegen muss ein Anweisungskörper im interaktiven Modus durch Drücken der (¢)-Taste beendet werden.
4.2.1 Umbrechen langer Zeilen
Prinzipiell können Quellcodezeilen beliebig lang werden. Viele Programmierer beschränken die Länge ihrer Quellcodezeilen jedoch, damit beispielsweise mehrere
Quellcodedateien nebeneinander auf den Bildschirm passen oder der Code auch auf
Geräten mit einer festen Zeilenbreite angenehm zu lesen ist. Eine geläufige maximale Zeilenlänge ist 80 Zeichen. Innerhalb von Klammern dürfen Sie Quellcode zwar
beliebig umbrechen, doch an vielen anderen Stellen sind Sie an die strengen syntaktischen Regeln von Python gebunden. Durch Einsatz der Backslash-Notation ist es
möglich, Quellcode an nahezu beliebigen Stellen in eine neue Zeile umzubrechen:
>>>
...
...
>>>
10
var \
= \
10
var
Grundsätzlich kann ein Backslash überall da stehen, wo auch ein Leerzeichen hätte
stehen können. Daher ist auch ein Backslash innerhalb eines Strings möglich:
>>> "Hallo \
... Welt"
'Hallo Welt'
Beachten Sie dabei aber, dass eine Einrückung des umbrochenen Teils des Strings
Leerzeichen in den String schreibt. Aus diesem Grund sollten Sie folgende Variante,
einen String in mehrere Zeilen zu schreiben, vorziehen:
>>> "Hallo " \
... "Welt"
'Hallo Welt'
4.2.2 Zusammenfügen mehrerer Zeilen
Genauso, wie Sie eine einzeilige Anweisung mithilfe des Backslashs auf mehrere Zeilen umbrechen, können Sie mehrere einzeilige Anweisungen in einer Zeile zusammenfassen. Dazu werden die Anweisungen durch ein Semikolon voneinander getrennt:
59
4
4
Der Weg zum ersten Programm
>>> print("Hallo"); print("Welt")
Hallo
Welt
Anweisungen, die aus einem Anweisungskopf und einem Anweisungskörper bestehen, können auch ohne Einsatz eines Semikolons in eine Zeile gefasst werden, sofern
der Anweisungskörper selbst aus nicht mehr als einer Zeile besteht:
>>> x = True
>>> if x: print("Hallo Welt")
...
Hallo Welt
4.3 Das erste Programm
Aus Sicht des Spielers soll das Ganze folgendermaßen aussehen:
Raten Sie:
Zu klein
Raten Sie:
Zu groß
Raten Sie:
Zu klein
Raten Sie:
Super, Sie
42
10000
4
999
1337
haben es in 4 Versuchen geschafft!
Kommen wir vom Ablaufprotokoll zur konkreten Implementierung in Python:
Initialisierung:
Hier werden Variablen
angelegt und mit Werten
versehen.
Sollte der Anweisungskörper mehrere Zeilen lang sein, können diese durch ein Semikolon zusammengefasst werden:
>>> x = True
>>> if x: print("Hallo"); print("Welt")
...
Hallo
Welt
geheimnis = 1337
versuch = 0
zaehler = 0
while versuch != geheimnis:
versuch = int(input("Raten
Alle durch ein Semikolon zusammengefügten Anweisungen werden so behandelt,
als wären sie gleich weit eingerückt. Allein ein Doppelpunkt vergrößert die Einrückungstiefe. Aus diesem Grund gibt es im oben genannten Beispiel keine Möglichkeit, in derselben Zeile eine Anweisung zu schreiben, die nicht mehr im Körper der
if-Anweisung steht.
Sie: "))
if versuch < geheimnis:
print("Zu klein")
if versuch > geheimnis:
print("Zu groß")
zaehler = zaehler + 1
Hinweis
Beim Einsatz des Backslashs und vor allem des Semikolons entsteht schnell unleserlicher Code. Verwenden Sie beide Notationen daher nur, wenn Sie meinen, dass es der
Lesbarkeit und Übersichtlichkeit dienlich ist.
4.3 Das erste Programm
Als Einstieg in die Programmierung mit Python erstellen wir hier ein kleines Beispielprogramm, das Spiel Zahlenraten. Die Spielidee ist folgende: Der Spieler soll eine im
Programm festgelegte Zahl erraten. Dazu stehen ihm beliebig viele Versuche zur Verfügung. Nach jedem Versuch informiert ihn das Programm darüber, ob die geratene
Zahl zu groß, zu klein oder genau richtig gewesen ist. Sobald der Spieler die Zahl erraten hat, gibt das Programm die Anzahl der Versuche aus und wird beendet.
60
Schleifenkopf:
In einer Schleife werden
so lange Zahlen vom Benutzer
gefordert, wie die geheime
Zahl noch nicht erraten ist.
Schleifenkörper:
Der zur Schleife gehörige
Block wird durch seine
Einrückung bestimmt.
Bildschirmausgabe:
Mit der Funktion print
können Zeichenketten
ausgegeben werden.
print("Super, Sie haben es in ", zaehler, "Versuchen geschafft!")
Abbildung 4.4 Zahlenraten, ein einfaches Beispiel
Die hervorgehobenen Bereiche des Programms werden im Folgenden noch einmal
ausführlich diskutiert.
Initialisierung
Bei der Initialisierung werden die für das Spiel benötigten Variablen angelegt. Python
unterscheidet zwischen verschiedenen Datentypen, wie etwa Zeichenketten, Ganzoder Fließkommazahlen. Der Typ einer Variablen wird zur Laufzeit des Programms
anhand des ihr zugewiesenen Wertes bestimmt. Es ist also nicht nötig, einen Datentyp explizit anzugeben. Eine Variable kann im Laufe des Programms ihren Typ
ändern.
61
4
Der Weg zum ersten Programm
In unserem Spiel werden Variablen für die gesuchte Zahl (geheimnis), die Benutzereingabe (versuch) und den Versuchszähler (zaehler) angelegt und mit Anfangswerten versehen. Dadurch, dass versuch und geheimnis zu Beginn des Programms
verschiedene Werte haben, ist sichergestellt, dass die Schleife anläuft.
Schleifenkopf
Eine while-Schleife wird eingeleitet. Eine while-Schleife läuft so lange, wie die im
Schleifenkopf genannte Bedingung (versuch != geheimnis) erfüllt ist, also in diesem
Fall, bis die Variablen versuch und geheimnis den gleichen Wert haben. Aus Benutzersicht bedeutet dies: Die Schleife läuft so lange, bis die Benutzereingabe mit der zu
erratenden Zahl übereinstimmt.
Den zum Schleifenkopf gehörigen Schleifenkörper erkennt man daran, dass die
nachfolgenden Zeilen um eine Stufe weiter eingerückt wurden. Sobald die Einrückung wieder um einen Schritt nach links geht, endet der Schleifenkörper.
4.5 Der Fehlerfall
4.4 Kommentare
Sie können sich sicherlich vorstellen, dass es nicht das Ziel ist, Programme zu schreiben, die auf eine Postkarte passen würden. Mit der Zeit wird der Quelltext Ihrer Programme umfangreicher und komplexer werden. Irgendwann ist der Zeitpunkt
erreicht, da bloßes Gedächtnistraining nicht mehr ausreicht, um die Übersicht zu
bewahren. Spätestens dann kommen Kommentare ins Spiel.
Ein Kommentar ist ein kleiner Text, der eine bestimmte Stelle des Quellcodes erläutert und auf Probleme, offene Aufgaben oder Ähnliches hinweist. Ein Kommentar
wird vom Interpreter einfach ignoriert, ändert also am Ablauf des Programms nichts.
Die einfachste Möglichkeit, einen Kommentar zu verfassen, ist der Zeilenkommentar.
Diese Art des Kommentars wird mit dem #-Zeichen begonnen und endet mit dem
Ende der Zeile:
# Ein Beispiel mit Kommentaren
print("Hallo Welt!") # Simple Hallo-Welt-Ausgabe
Schleifenkörper
In der ersten Zeile des Schleifenkörpers wird eine vom Spieler eingegebene Zahl eingelesen und in der Variablen versuch gespeichert. Dabei wird mithilfe von
input("Raten Sie: ") die Eingabe des Benutzers eingelesen und mit int in eine ganze
Zahl konvertiert (von engl. integer, »ganze Zahl«). Diese Konvertierung ist wichtig, da
Benutzereingaben generell als String eingelesen werden. In unserem Fall möchten
wir die Eingabe jedoch als Zahl weiterverwenden. Der String "Raten Sie: " wird vor
der Eingabe ausgegeben und dient dazu, den Benutzer zur Eingabe der Zahl aufzufordern.
Nach dem Einlesen wird einzeln geprüft, ob die eingegebene Zahl versuch größer
oder kleiner als die gesuchte Zahl geheimnis ist, und mittels print eine entsprechende
Meldung ausgegeben. Schließlich wird der Versuchszähler zaehler um eins erhöht.
Für längere Kommentare bietet sich ein Blockkommentar an. Ein Blockkommentar
beginnt und endet mit drei aufeinanderfolgenden Anführungszeichen:3
""" Dies ist ein Blockkommentar,
er kann sich über mehrere Zeilen erstrecken. """
Kommentare sollten nur gesetzt werden, wenn sie zum Verständnis des Quelltextes
beitragen oder wertvolle Informationen enthalten. Jede noch so unwichtige Zeile zu
kommentieren führt dazu, dass man den Wald vor lauter Bäumen nicht mehr sieht.
4.5 Der Fehlerfall
Nach dem Hochzählen des Versuchszählers endet der Schleifenkörper, da die nächste
Zeile nicht mehr unter dem Schleifenkopf eingerückt ist.
Vielleicht haben Sie bereits mit dem Beispielprogramm aus Abschnitt 4.3, »Das erste
Programm«, gespielt und sind dabei auf eine solche oder ähnliche Ausgabe des Interpreters gestoßen:
Bildschirmausgabe
File "spiel.py", line 8
if guess < secret
^
SyntaxError: invalid syntax
Die letzte Programmzeile gehört nicht mehr zum Schleifenkörper. Das bedeutet, dass
sie erst ausgeführt wird, wenn die Schleife vollständig durchlaufen, das Spiel also
gewonnen ist. In diesem Fall werden eine Erfolgsmeldung sowie die Anzahl der benötigten Versuche ausgegeben. Das Spiel ist beendet.
Erstellen Sie jetzt Ihr erstes Python-Programm, indem Sie den Programm-Code in
eine Datei namens spiel.py schreiben und ausführen. Ändern Sie den Startwert von
geheimnis, und spielen Sie das Spiel.
62
3 Eigentlich wird mit dieser Notation kein Blockkommentar erzeugt, sondern ein mehrzeiliger
String, der sich aber auch dazu eignet, größere Quellcodebereiche »auszukommentieren«.
63
4
4
Der Weg zum ersten Programm
Es handelt sich dabei um eine Fehlermeldung, die in diesem Fall auf einen Syntaxfehler im Programm hinweist. Können Sie erkennen, welcher Fehler hier vorliegt? Richtig, es fehlt der Doppelpunkt am Ende der Zeile.
Python stellt bei der Ausgabe einer Fehlermeldung wichtige Informationen bereit,
die bei der Fehlersuche hilfreich sind:
왘 Die erste Zeile der Fehlermeldung gibt Aufschluss darüber, in welcher Zeile inner-
halb welcher Datei der Fehler aufgetreten ist. In diesem Fall handelt es sich um die
Zeile 8 in der Datei spiel.py.
왘 Der mittlere Teil zeigt den betroffenen Ausschnitt des Quellcodes, wobei die
genaue Stelle, auf die sich die Meldung bezieht, mit einem kleinen Pfeil markiert
ist. Wichtig ist, dass dies die Stelle ist, an der der Interpreter den Fehler erstmalig
feststellen konnte. Das ist nicht unbedingt gleichbedeutend mit der Stelle, an der
der Fehler gemacht wurde.
왘 Die letzte Zeile spezifiziert den Typ der Fehlermeldung, in diesem Fall einen Syn-
tax Error. Dies sind die am häufigsten auftretenden Fehlermeldungen. Sie zeigen
an, dass der Compiler das Programm aufgrund eines formalen Fehlers nicht weiter
übersetzen konnte.
Neben dem Syntaxfehler gibt es eine Reihe weiterer Fehlertypen, die an dieser Stelle
nicht alle im Detail besprochen werden sollen. Wir möchten jedoch noch auf den
IndentationError (dt. »Einrückungsfehler«) hinweisen, da er gerade bei PythonAnfängern häufig auftritt. Versuchen Sie dazu einmal, folgendes Programm auszuführen:
i = 10
if i == 10:
print("Falsch eingerückt")
Sie sehen, dass die letzte Zeile eigentlich einen Schritt weiter eingerückt sein müsste.
So, wie das Programm jetzt geschrieben wurde, hat die if-Anweisung keinen Anweisungskörper. Das ist nicht zulässig, und es tritt ein IndentationError auf:
File "indent.py", line 3
print("Falsch eingerückt")
^
IndentationError: expected an indented block
Nachdem wir uns mit diesen Grundlagen vertraut gemacht haben, kommen wir zu
den Kontrollstrukturen, die es dem Programmierer erlauben, den Programmfluss zu
steuern.
64
Kapitel 19
Funktionen
Aus der Mathematik kennen Sie den Begriff der Funktion, mit dem eine Zuordnungsvorschrift bezeichnet wird. Die Funktion f(x) = x2 ordnet beispielsweise dem Parameter x sein Quadriertes zu. Eine Funktion im mathematischen Sinne besteht aus
einem Namen, einer Liste von Parametern und einer Berechnungsvorschrift für den
Funktionswert.
In der Programmierung findet sich das mathematische Konzept der Funktion wieder. Wir haben beispielsweise bereits die eingebaute Funktion len besprochen, die
die Länge eines iterierbaren Objekts berechnet. Dazu bekommt sie das entsprechende Objekt als Parameter übergeben und gibt das Ergebnis in Form eines Rückgabewertes zurück.
>>> len("Dieser String ist ein Parameter")
31
Offensichtlich besteht hier eine gewisse Analogie zum mathematischen Begriff der
Funktion. Eine Funktion in der Programmierung besteht aus einem Funktionsnamen, einer Liste von Funktionsparametern und einem Code-Block, dem Funktionskörper. Bei einem Funktionsaufruf wird dann der Funktionskörper unter
Berücksichtigung der übergebenen Parameter ausgeführt. Eine Funktion in Python
kann, wie len, einen Rückgabewert haben oder nicht.1
Funktionen werden in der Programmierung dazu eingesetzt, um Redundanzen im
Quellcode zu vermeiden. Das bedeutet, dass Code-Stücke, die in der gleichen oder
einer ähnlichen Form öfter im Programm benötigt werden, nicht jedes Mal neu
geschrieben, sondern in einer Funktion gekapselt werden. Diese Funktion kann dann
an den Stellen, an denen sie benötigt wird, aufgerufen werden. Darüber hinaus bilden
Funktionen ein elegantes Hilfsmittel, um einen langen Quellcode sinnvoll in Unterprogramme aufzuteilen. Das erhöht die Les- und Wartbarkeit des Codes.
Im Folgenden erläutern wir die Handhabung einer bestehenden Funktion am Beispiel von range. Vieles des hier Gesagten kennen Sie bereits aus Kapitel 8, »Funktio-
1 In Python wird nicht, wie beispielsweise in PASCAL, zwischen den Begriffen Funktion und Prozedur unterschieden. Unter einer Prozedur versteht man eine Funktion, die keinen Rückgabewert hat.
261
19
Funktionen
19.1
Schreiben einer Funktion
nen, Methoden und Attribute«, wir möchten es an dieser Stelle trotzdem noch
einmal wiederholen.
nen, wie es hier beschrieben wurde. Im nächsten Abschnitt werden wir uns damit
befassen, wie Sie eine eigene Funktion erstellen.
Die eingebaute Funktion range wurde in Abschnitt 5.2.6, »Die for-Schleife als Zählschleife«, eingeführt und erzeugt ein iterierbares Objekt über eine begrenzte Anzahl
fortlaufender ganzer Zahlen:
19.1 Schreiben einer Funktion
ergebnis = range(0, 10, 2)
Im Beispiel oben wurde range aufgerufen; man nennt dies den Funktionsaufruf. Dazu
wird hinter den Namen der Funktion ein (möglicherweise leeres) Klammernpaar
geschrieben. Innerhalb dieser Klammern stehen, durch Kommata getrennt, die Parameter der Funktion. Wie viele es sind und welche Art von Parametern eine Funktion
erwartet, hängt von der Definition der Funktion ab und ist sehr verschieden. In diesem Fall benötigt range drei Parameter, um ausreichend Informationen zu erlangen.
Die Gesamtheit der Parameter wird Funktionsschnittstelle genannt. Konkrete, über
eine Schnittstelle übergebene Instanzen heißen Argumente. Ein Parameter hingegen
bezeichnet einen Platzhalter für Argumente.
Nachdem die Funktion abgearbeitet wurde, wird ihr Ergebnis zurückgegeben. Sie
können sich bildlich vorstellen, dass der Funktionsaufruf, wie er im Quelltext steht,
durch den Rückgabewert ersetzt wird. Im Beispiel oben haben wir dem Rückgabewert
von range direkt einen Namen zugewiesen und können auf ihn fortan über ergebnis
zugreifen. So können wir beispielsweise in einer for-Schleife über das Ergebnis des
range-Aufrufs iterieren:
>>> for i in ergebnis:
...
print(i)
...
0
2
4
6
8
Es ist auch möglich, das Ergebnis des range-Aufrufs mit list in eine Liste zu überführen:
>>>
>>>
[0,
>>>
6
liste = list(ergebnis)
liste
2, 4, 6, 8]
liste[3]
So viel vorerst zur Verwendung vordefinierter Funktionen. Python erlaubt es Ihnen,
eigene Funktionen zu schreiben, die Sie nach demselben Schema verwenden kön-
262
Bevor wir uns an konkreten Quelltext wagen, möchten wir rekapitulieren, was eine
Funktion ausmacht, was also bei der Definition einer Funktion anzugeben ist:
왘 Eine Funktion muss einen Namen haben, über den sie in anderen Teilen des Pro-
gramms aufgerufen werden kann. Die Zusammensetzung des Funktionsnamens
erfolgt nach denselben Regeln wie die Namensgebung einer Referenz.2
왘 Eine Funktion muss eine Schnittstelle haben, über die Informationen vom aufru-
fenden Programmteil in den Kontext der Funktion übertragen werden. Eine
Schnittstelle kann aus beliebig vielen (unter Umständen auch keinen) Parametern
bestehen. Funktionsintern wird jedem dieser Parameter ein Name gegeben. Sie
lassen sich dann wie Referenzen im Funktionskörper verwenden.
왘 Eine Funktion muss einen Wert zurückgeben. Jede Funktion gibt automatisch None
zurück, wenn der Rückgabewert nicht ausdrücklich angegeben wurde.
Zur Definition einer Funktion wird in Python das Schlüsselwort def verwendet. Syntaktisch sieht die Definition folgendermaßen aus:
def Funktionsname(parameter_1, …, parameter_n):
Anweisung
19
…
19
Anweisung
Abbildung 19.1 Definition einer Funktion
Nach dem Schlüsselwort def steht der gewählte Funktionsname. Dahinter werden in
einem Klammernpaar die Namen aller Parameter aufgelistet. Nach der Definition der
Schnittstelle folgen ein Doppelpunkt und, eine Stufe weiter eingerückt, der Funktionskörper. Bei dem Funktionskörper handelt es sich um einen beliebigen CodeBlock, in dem die Parameternamen als Referenzen verwendet werden dürfen. Im
Funktionskörper dürfen auch wieder Funktionen aufgerufen werden.
Betrachten wir einmal die konkrete Implementierung einer Funktion, die die Fakultät einer ganzen Zahl berechnet und das Ergebnis auf dem Bildschirm ausgibt:
2 Das bedeutet, dass sich der Funktionsname aus großen und kleinen Buchstaben, Zahlen sowie
dem Unterstrich (»_«) zusammensetzen, allerdings nicht mit einer Zahl beginnen darf. Seit
Python 3.0 dürfen auch Buchstaben verwendet werden, die nicht im englischen Alphabet enthalten sind.
263
19
Funktionen
def fak(zahl):
ergebnis = 1
for i in range(2, zahl+1):
ergebnis *= i
print(ergebnis)
Anhand dieses Beispiels können Sie gut nachvollziehen, wie der Parameter zahl im
Funktionskörper verarbeitet wird. Nachdem die Berechnung erfolgt ist, wird ergebnis mittels print ausgegeben. Die Referenz zahl ist nur innerhalb des Funktionskörpers definiert und hat nichts mit anderen Referenzen außerhalb der Funktion zu tun.
Wenn Sie das obige Beispiel jetzt speichern und ausführen, werden Sie feststellen,
dass zwar keine Fehlermeldung angezeigt wird, aber auch sonst nichts passiert. Nun,
das liegt daran, dass wir bisher nur eine Funktion definiert haben. Um sie konkret im
Einsatz zu sehen, müssen wir sie mindestens einmal aufrufen. Folgendes Programm
liest in einer Schleife Zahlen vom Benutzer ein und berechnet deren Fakultät mithilfe
der soeben definierten Funktion:
def fak(zahl):
ergebnis = 1
for i in range(2, zahl+1):
ergebnis *= i
print(ergebnis)
while True:
eingabe = int(input("Geben Sie eine Zahl ein: "))
fak(eingabe)
Sie sehen, dass der Quellcode in zwei Komponenten aufgeteilt wurde: zum einen in
die Funktionsdefinition oben und zum anderen in das auszuführende Hauptprogramm unten. Das Hauptprogramm besteht aus einer Endlosschleife, in der die
Funktion fak mit der eingegebenen Zahl als Parameter aufgerufen wird.
Betrachten Sie noch einmal die beiden Komponenten des Programms. Es wäre im
Sinne der Kapselung der Funktionalität erstrebenswert, das Programm so zu ändern,
dass sich das Hauptprogramm allein um die Interaktion mit dem Benutzer und das
Anstoßen der Berechnung kümmert, während das Unterprogramm fak die Berechnung tatsächlich durchführt. Das Ziel dieses Ansatzes ist es vor allem, dass die Funktion fak auch in anderen Programmteilen zur Berechnung einer weiteren Fakultät
aufgerufen werden kann. Dazu ist es unerlässlich, dass fak sich ausschließlich um die
Berechnung kümmert. Es passt nicht in dieses Konzept, dass fak das Ergebnis der
Berechnung selbst ausgibt.
Idealerweise sollte unsere Funktion fak die Berechnung abschließen und das Ergebnis an das Hauptprogramm zurückgeben, sodass die Ausgabe dort erfolgen kann.
264
19.1
Schreiben einer Funktion
Dies erreichen Sie durch das Schlüsselwort return, das die Ausführung der Funktion
sofort beendet und einen eventuell angegebenen Rückgabewert zurückgibt.
def fak(zahl):
ergebnis = 1
for i in range(2, zahl+1):
ergebnis *= i
return ergebnis
while True:
eingabe = int(input("Geben Sie eine Zahl ein: "))
print(fak(eingabe))
Eine Funktion kann zu jeder Zeit im Funktionsablauf mit return beendet werden. Die
folgende Version der Funktion prüft vor der Berechnung, ob es sich bei dem übergebenen Parameter um eine negative Zahl handelt. Ist das der Fall, wird die Abhandlung
der Funktion abgebrochen:
def fak(zahl):
if zahl < 0:
return None
ergebnis = 1
for i in range(2, zahl+1):
ergebnis *= i
return ergebnis
19
while True:
eingabe = int(input("Geben Sie eine Zahl ein: "))
ergebnis = fak(eingabe)
if ergebnis is None:
print("Fehler bei der Berechnung")
else:
print(ergebnis)
In der zweiten Zeile des Funktionskörpers wurde mit return None explizit der Wert
None zurückgegeben, was nicht unbedingt nötig ist. Der folgende Code ist äquivalent:
if zahl < 0:
return
Vom Programmablauf her ist es egal, ob Sie None explizit oder implizit zurückgeben.
Aus Gründen der Lesbarkeit ist return None in diesem Fall trotzdem sinnvoll, denn es
handelt sich um einen ausdrücklich gewünschten Rückgabewert. Er ist Teil der Funktionslogik und nicht bloß ein Nebenprodukt des Funktionsabbruchs.
265
19
Funktionen
Die Funktion fak, wie sie in diesem Beispiel zu sehen ist, kann zu jeder Zeit zur
Berechnung einer Fakultät aufgerufen werden, unabhängig davon, in welchem Kontext diese Fakultät benötigt wird.
Selbstverständlich können Sie in Ihrem Quelltext mehrere eigene Funktionen definieren und aufrufen. Das folgende Beispiel soll bei Eingabe einer negativen Zahl
keine Fehlermeldung, sondern die Fakultät des Betrags dieser Zahl ausgeben:
def betrag(zahl):
if zahl < 0:
return -zahl
else:
return zahl
def fak(zahl):
ergebnis = 1
for i in range(2, zahl+1):
ergebnis *= i
return ergebnis
while True:
eingabe = int(input("Geben Sie eine Zahl ein: "))
print(fak(betrag(eingabe)))
Für die Berechnung des Betrags einer Zahl gibt es in Python auch die Built-in Function abs. Diese werden Sie noch in diesem Kapitel kennenlernen.
Ein Begriff soll noch eingeführt werden, bevor wir uns den Funktionsparametern
widmen. Eine Funktion kann über ihren Namen nicht nur aufgerufen, sondern auch
wie eine Instanz behandelt werden. So ist es beispielsweise möglich, den Typ einer
Funktion abzufragen. Die folgenden Beispiele nehmen an, dass die Funktion fak im
interaktiven Modus verfügbar ist:
>>> type(fak)
<class 'function'>
>>> p = fak
>>> p(5)
120
>>> fak(5)
120
Durch die Definition einer Funktion wird ein sogenanntes Funktionsobjekt erzeugt,
das über den Funktionsnamen referenziert wird.
266
19.2
Funktionsparameter
19.2 Funktionsparameter
Wir haben bereits oberflächlich besprochen, was Funktionsparameter sind und wie
sie verwendet werden können, doch das ist bei Weitem noch nicht die ganze Wahrheit. In diesem Abschnitt werden Sie drei alternative Techniken zur Übergabe von
Funktionsparametern kennenlernen.
19.2.1 Optionale Parameter
Zu Beginn dieses Kapitels wurde die Verwendung einer Funktion anhand der Built-in
Function range erklärt. Sicherlich wissen Sie aus Abschnitt 5.2.6 über die for-Schleife
noch, dass der letzte der drei Parameter der range-Funktion optional ist. Das bedeutet
zunächst einmal, dass dieser Parameter beim Funktionsaufruf weggelassen werden
kann. Ein optionaler Parameter muss funktionsintern mit einem Wert vorbelegt
sein, üblicherweise einem Standardwert, der in einem Großteil der Funktionsaufrufe
ausreichend ist. Bei der Funktion range regelt der dritte Parameter die Schrittweite
und ist mit 1 vorbelegt. Folgende Aufrufe von range sind also äquivalent:
왘 range(2, 10, 1)
왘 range(2, 10)
Dies ist interessant, denn oftmals hat eine Funktion ein Standardverhalten, das sich
durch zusätzliche Parameter an spezielle Gegebenheiten anpassen lassen soll. In den
überwiegenden Fällen, in denen das Standardverhalten jedoch genügt, wäre es
umständlich, trotzdem die für diesen Aufruf überflüssigen Parameter anzugeben.
Deswegen sind vordefinierte Parameterwerte oft eine sinnvolle Ergänzung einer
Funktionsschnittstelle.
Um einen Funktionsparameter mit einem Default-Wert vorzubelegen, wird dieser
Wert bei der Funktionsdefinition zusammen mit einem Gleichheitszeichen hinter
den Parameternamen geschrieben. Die folgende Funktion soll, je nach Anwendung,
die Summe von zwei, drei oder vier ganzen Zahlen berechnen und das Ergebnis
zurückgeben. Dabei soll der Programmierer beim Aufruf der Funktion nur so viele
Zahlen angeben müssen, wie er benötigt:
def summe(a, b, c=0, d=0):
return a + b + c + d
Um eine Addition durchzuführen, müssen mindestens zwei Parameter übergeben
worden sein. Die anderen beiden werden mit 0 vorbelegt. Sollten sie beim Funktionsaufruf nicht explizit angegeben werden, fließen sie nicht in die Addition ein. Die
Funktion kann folgendermaßen aufgerufen werden:
267
19
19
Funktionen
>>> summe(1, 2)
3
>>> summe(1, 2, 3)
6
>>> summe(1, 2, 3, 4)
10
Beachten Sie, dass optionale Parameter nur am Ende einer Funktionsschnittstelle
stehen dürfen. Das heißt, dass auf einen optionalen kein nicht-optionaler Parameter
mehr folgen darf. Diese Einschränkung ist wichtig, damit alle angegebenen Parameter eindeutig zugeordnet werden können.
19.2.2 Schlüsselwortparameter
Neben den bislang verwendeten sogenannten Positional Arguments (Positionsparameter) gibt es in Python eine weitere Möglichkeit, Parameter zu übergeben. Solche
Parameter werden Keyword Arguments (Schlüsselwortparameter) genannt. Es handelt sich dabei um eine alternative Technik, Parameter beim Funktionsaufruf zu
übergeben. An der Funktionsdefinition ändert sich nichts. Betrachten wir dazu unsere Summenfunktion, die wir im vorangegangenen Abschnitt geschrieben haben:
def summe(a, b, c=0, d=0):
return a + b + c + d
Diese Funktion kann auch folgendermaßen aufgerufen werden:
summe(d=1, b=3, c=2, a=1)
Dazu werden im Funktionsaufruf die Parameter, wie bei einer Zuweisung, auf den
gewünschten Wert gesetzt. Da bei der Übergabe der jeweilige Parametername angegeben werden muss, ist die Zuordnung unter allen Umständen eindeutig. Das erlaubt
es dem Programmierer, Schlüsselwortparameter in beliebiger Reihenfolge anzugeben.
Es ist möglich, beide Formen der Parameterübergabe zu kombinieren. Dabei ist zu
beachten, dass keine Positional Arguments auf Keyword Arguments folgen dürfen,
Letztere also immer am Ende des Funktionsaufrufs stehen müssen.
19.2
Funktionsparameter
19.2.3 Beliebige Anzahl von Parametern
Rufen Sie sich noch einmal die Verwendung der eingebauten Funktion print in Erinnerung:
>>>
P
>>>
P y
>>>
...
P y
print("P")
print("P", "y", "t", "h", "o", "n")
t h o n
print("P", "y", "t", "h", "o", "n", " ", "i", "s", "t", " ",
"s", "u", "p", "e", "r")
t h o n i s t s u p e r
Offensichtlich ist es möglich, der Funktion print eine beliebige Anzahl von Parametern zu übergeben. Diese Eigenschaft ist nicht exklusiv für die print-Funktion, sondern es können auch eigene Funktionen definiert werden, denen beliebig viele
Parameter übergeben werden können.
Für beide Formen der Parameterübergabe (Positional und Keyword) gibt es eine
Notation, die es einer Funktion ermöglicht, beliebig viele Parameter entgegenzunehmen. Bleiben wir zunächst einmal bei den Positional Arguments. Betrachten Sie dazu
folgende Funktionsdefinition:
def funktion(a, b, *weitere):
print("Feste Parameter:", a, b)
print("Weitere Parameter:", weitere)
Zunächst einmal werden ganz klassisch zwei Parameter a und b festgelegt und
zusätzlich ein dritter namens weitere. Wichtig ist der Stern vor seinem Namen. Bei
einem Aufruf dieser Funktion würden a und b, wie Sie das bereits kennen, die ersten
beiden übergebenen Instanzen referenzieren. Interessant ist, dass weitere fortan ein
Tupel referenziert, das alle zusätzlich übergebenen Instanzen enthält. Anschaulich
wird dies, wenn wir folgende Funktionsaufrufe betrachten:
funktion(1, 2)
funktion(1, 2, "Hallo Welt", 42, [1,2,3,4])
Die Ausgabe der Funktion im Falle des ersten Aufrufs ist:
summe(1, 2, c=10, d=11)
Feste Parameter: 1 2
Weitere Parameter: ()
Beachten Sie außerdem, dass nur solche Parameter als Keyword Arguments übergeben werden dürfen, die im selben Funktionsaufruf nicht bereits als Positional Arguments übergeben wurden.
Der Parameter weitere referenziert also ein leeres Tupel. Im Falle des zweiten Aufrufs
sieht die Ausgabe folgendermaßen aus:
268
269
19
19
Funktionen
19.2
Funktionsparameter
Feste Parameter: 1 2
Weitere Parameter: ('Hallo Welt', 42, [1, 2, 3, 4])
Der Parameter weitere referenziert also ein leeres Dictionary. Nach dem zweiten Aufruf sieht die Ausgabe so aus:
Der Parameter weitere referenziert nun ein Tupel, in dem alle über a und b hinausgehenden Instanzen in der Reihenfolge enthalten sind, in der sie übergeben wurden.
Feste Parameter: 1 2
Weitere Parameter: {'johannes': 'ernesti', 'peter': 'kaiser'}
An dieser Stelle möchten wir die im vorangegangenen Beispiel definierte Funktion
Beide Techniken können zusammen verwendet werden, wie folgende Funktionsdefinition zeigt:
summe dahingehend erweitern, dass sie die Summe einer vom Benutzer festgelegten
Zahl von Parametern berechnen kann:
def summe(*parameter):
s = 0
for p in parameter:
s += p
return s
Das folgende Beispiel demonstriert die Anwendung der weiterentwickelten Funktion
summe im interaktiven Modus:
>>> summe(1, 2, 3, 4, 5)
15
>>> summe(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
78
Diese Art, einer Funktion das Entgegennehmen beliebig vieler Parameter zu ermöglichen, funktioniert ebenso für Keyword Arguments. Der Unterschied besteht darin,
dass der Parameter, der alle weiteren Instanzen enthalten soll, in der Funktionsdefinition mit zwei Sternen geschrieben werden muss. Außerdem referenziert er später
kein Tupel, sondern ein Dictionary. Dieses Dictionary enthält den jeweiligen Parameternamen als Schlüssel und die übergebene Instanz als Wert. Betrachten Sie dazu folgende Funktionsdefinition:
def funktion(a, b, **weitere):
print("Feste Parameter:", a, b)
print("Weitere Parameter:", weitere)
und diese beiden dazu passenden Funktionsaufrufe:
funktion(1, 2)
funktion(1, 2, johannes="ernesti", peter="kaiser")
Die Ausgabe nach dem ersten Funktionsaufruf sieht folgendermaßen aus:
Feste Parameter: 1 2
Weitere Parameter: {}
def funktion(*positional, **keyword):
print("Positional:", positional)
print("Keyword:", keyword)
Der Funktionsaufruf
funktion(1, 2, 3, 4, hallo="welt", key="word")
gibt diese Werte aus:
Positional: (1, 2, 3, 4)
Keyword: {'hallo': 'welt', 'key': 'word'}
Sie sehen, dass positional ein Tupel mit allen Positions- und keyword ein Dictionary
mit allen Schlüsselwortparametern referenziert.
19.2.4 Reine Schlüsselwortparameter
Es ist möglich, Parameter zu definieren, die ausschließlich in Form von Schlüsselwortparametern übergeben werden dürfen. Solche reinen Schlüsselwortparameter3
werden bei der Funktionsdefinition nach dem Parameter geschrieben, der beliebig
viele Positionsargumente aufnimmt:
def f(a, b, *c, d, e):
print(a, b, c, d, e)
In diesem Fall besteht die Funktionsschnittstelle aus den beiden Positionsparametern a und b, der Möglichkeit für weitere Positionsparameter *c und den beiden reinen Schlüsselwortparametern d und e. Es gibt keine Möglichkeit, die Parameter d und
e zu übergeben, außer in Form von Schlüsselwortparametern.
>>> f(1, 2, 3, 4, 5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() needs keyword-only argument d
3 engl. keyword-only parameters
270
271
19
19
Funktionen
>>> f(1, 2, 3, 4, 5, d=4, e=5)
1 2 (3, 4, 5) 4 5
Wie bei Positionsparametern müssen reine Schlüsselwortparameter angegeben werden, sofern sie nicht mit einem Default-Wert belegt sind:
19.2
Funktionsparameter
Das ist sehr umständlich. Zudem laufen wir der Allgemeinheit der Funktion summe
zuwider, denn die Anzahl der Elemente des Tupels t muss stets bekannt sein. Wünschenswert ist ein Weg, eine in einem iterierbaren Objekt gespeicherte Liste von
Argumenten direkt einer Funktion übergeben zu können. Dieser Vorgang wird Entpacken genannt.
>>> def f(a, b, *c, d=4, e=5):
...
print(a, b, c, d, e)
...
>>> f(1, 2, 3)
1 2 (3, 4, 5) 4 5
Das Entpacken eines iterierbaren Objekts geschieht dadurch, dass der Funktion das
Objekt mit einem vorangestellten Sternchen (*) übergeben wird. Im folgenden Beispiel wird das von der eingebauten Funktion range erzeugte iterierbare Objekt verwendet, um mithilfe der Funktion summe die Summe der ersten 100 natürlichen
Zahlen zu berechnen:4
Wenn zusätzlich die Übergabe beliebig vieler Schlüsselwortparameter ermöglicht
werden soll, folgt die dazu notwendige **-Notation nach den reinen Schlüsselwortparametern am Ende der Funktionsdefinition:
>>> summe(*range(101))
5050
def f(a, b, *args, d, e, **kwargs):
print(a, b, args, d, e, kwargs)
Es ist auch möglich, reine Schlüsselwortparameter zu definieren, ohne gleichzeitig
beliebig viele Positionsparameter zuzulassen. Dazu werden die reinen Schlüsselwortparameter in der Funktionsschnittstelle durch einen * von den Positionsparametern
getrennt.
>>> def f(a, b, *, c, d):
...
print(a, b, c, d)
...
>>> f(1, 2, 3, 4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() takes exactly 2 positional arguments (4 given)
>>> f(1, 2, c=3, d=4)
1 2 3 4
19.2.5 Entpacken einer Parameterliste
In diesem Abschnitt lernen Sie eine weitere Möglichkeit kennen, Parameter an eine
Funktion zu übergeben. Dazu stellen wir uns vor, wir wollten mithilfe der in Abschnitt 19.2.3, »Beliebige Anzahl von Parametern«, definierten erweiterten Version
der summe-Funktion die Summe aller Einträge eines Tupels bestimmen. Dazu ist momentan die folgende Notation nötig:
>>> t = (1, 4, 3, 7, 9, 2)
>>> summe(t[0], t[1], t[2], t[3], t[4], t[5])
26
272
Beim Funktionsaufruf wird der Funktion jedes Element des iterierbaren Objekts, in
diesem Fall also die Zahlen von 0 bis 100, als gesonderter Parameter übergeben.
Das Entpacken einer Parameterliste funktioniert nicht nur im Zusammenhang mit
einer Funktion, die beliebig viele Parameter erwartet, sondern kann auch mit der
ursprünglichen Funktion summe, die die Summe von maximal vier Parametern bestimmt, verwendet werden:
def summe(a, b, c=0, d=0):
return a + b + c + d
Beachten Sie dabei, dass das zu entpackende iterierbare Objekt auch maximal vier
(und mindestens zwei) Elemente bereitstellt:
>>> t = (6, 3, 9, 12)
>>> summe(*t)
30
>>> summe(*[4, 6, 12, 7, 9])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: summe() takes at most 4 positional arguments (5 given)
Analog zum Entpacken eines Tupels zu einer Liste von Positionsparametern kann ein
Dictionary zu einer Liste von Schlüsselwortparametern entpackt werden. Der Unterschied in der Notation besteht darin, dass zum Entpacken eines Dictionarys zwei
Sternchen vorangestellt werden müssen:
4 Das beim Funktionsaufruf von range(n) zurückgegebene iterierbare Objekt durchläuft alle ganzen Zahlen von 0 bis einschließlich n–1. Daher muss im Beispiel 101 anstelle von 100 übergeben
werden.
273
19
19
Funktionen
>>> d = {"a" : 7, "b" : 3, "c" : 4}
>>> summe(**d)
14
Abschließend ist noch zu erwähnen, dass die Techniken zum Entpacken von Parameterlisten miteinander kombiniert werden können, wie folgendes Beispiel zeigt:
>>> summe(1, *(2,3), **{"d" : 4})
10
Beachten Sie allgemein, dass die hier vorgestellten Notationen nur innerhalb eines
Funktionsaufrufs verwendet werden dürfen und außerhalb dessen zu einem Fehler
führen.
19.2.6 Seiteneffekte
Bisher haben wir diese Thematik geschickt umschifft, doch Sie sollten immer im Hinterkopf behalten, dass sogenannte Seiteneffekte (engl. side effects) immer dann auftreten können, wenn eine Instanz eines mutablen Datentyps, also zum Beispiel einer
Liste oder eines Dictionarys, als Funktionsparameter übergeben wird.
In Python werden bei einem Funktionsaufruf keine Kopien der als Parameter übergebenen Instanzen erzeugt, sondern es wird funktionsintern mit Referenzen auf die
Argumente gearbeitet.5 Betrachten Sie dazu folgendes Beispiel:
>>> def f(a, b):
...
print(id(a))
...
print(id(b))
...
>>> p = 1
>>> q = [1,2,3]
>>> id(p)
134537016
>>> id(q)
134537004
>>> f(p, q)
134537016
134537004
19.2
Funktionsparameter
Referenzen p und q angelegt, die eine ganze Zahl bzw. eine Liste referenzieren. Dann
lassen wir uns die Identitäten der beiden Referenzen ausgeben und rufen die angelegte Funktion f auf. Sie sehen, dass die ausgegebenen Identitäten gleich sind. Es handelt sich also sowohl bei p und q als auch bei a und b im Funktionskörper um
Referenzen auf dieselben Instanzen. Dabei macht es zunächst einmal keinen Unterschied, ob die referenzierten Objekte Instanzen eines veränderlichen oder unveränderlichen Datentyps sind.
Trotzdem ist die Verwendung eines unveränderlichen Datentyps grundsätzlich frei
von Seiteneffekten, da dieser bei Veränderung automatisch kopiert wird und alte
Referenzen davon nicht berührt werden. Sollten wir also beispielsweise a im Funktionskörper um eins erhöhen, werden nachher a und p verschiedene Instanzen referenzieren. Dies führt dazu, dass bei der Verwendung unveränderlicher Datentypen in
Funktionsschnittstellen keine Seiteneffekte auftreten können.6
Diese Sicherheit können uns veränderliche Datentypen, etwa Listen oder Dictionarys, nicht geben. Dazu folgendes Beispiel:
def f(liste):
liste[0] = 42
liste += [5,6,7,8,9]
zahlen = [1,2,3,4]
print(zahlen)
f(zahlen)
print(zahlen)
19
Zunächst wird eine Funktion definiert, die eine Liste als Parameter erwartet und
diese im Funktionskörper verändert. Im Hauptprogramm wird eine Liste angelegt
und ausgegeben. Danach wird die Funktion aufgerufen und die Liste erneut ausgegeben. Die Ausgabe des Beispiels sieht folgendermaßen aus:
[1, 2, 3, 4]
[42, 2, 3, 4, 5, 6, 7, 8, 9]
Im interaktiven Modus definieren wir zuerst eine Funktion f, die zwei Parameter a
und b erwartet und deren jeweilige Identität ausgibt. Anschließend werden zwei
Es ist zu erkennen, dass sich die Änderungen nicht allein auf den Kontext der Funktion beschränken, sondern sich auch im Hauptprogramm auswirken. Dieses Phänomen wird Seiteneffekt genannt. Wenn eine Funktion nicht nur lesend auf eine Instanz
eines veränderlichen Datentyps zugreifen muss und Seiteneffekte nicht ausdrücklich erwünscht sind, sollten Sie innerhalb der Funktion oder bei der Parameterüber-
5 Diese Methode der Parameterübergabe wird Call by Reference genannt. Demgegenüber steht das
Prinzip Call by Value, bei dem funktionsintern auf Kopien der Argumente gearbeitet wird. Letztere Variante ist frei von Seiteneffekten, aber aufgrund des Kopierens langsamer.
6 Beachten Sie, dass dies nicht für unveränderliche Instanzen gilt, die veränderliche Instanzen enthalten. So können bei der Parameterübergabe eines Tupels, das eine Liste enthält, durchaus Seiteneffekte auftreten.
274
275
19
Funktionen
19.3
gabe eine Kopie der Instanz erzeugen. Das kann in Bezug auf das oben genannte
Beispiel so aussehen:7
f(zahlen[:])
Neben den bisher besprochenen Referenzparametern gibt es eine weitere, seltenere
Form von Seiteneffekten, die auftritt, wenn ein veränderlicher Datentyp als DefaultWert eines Parameters verwendet wird:
>>>
...
...
...
>>>
[1,
>>>
[1,
>>>
[1,
>>>
[1,
def f(a=[1,2,3]):
a += [4,5]
print(a)
f()
2, 3,
f()
2, 3,
f()
2, 3,
f()
2, 3,
4, 5]
4, 5, 4, 5]
4, 5, 4, 5, 4, 5]
4, 5, 4, 5, 4, 5, 4, 5]
Wir definieren im interaktiven Modus eine Funktion, die einen einzigen Parameter
erwartet, der mit einer Liste vorbelegt ist. Im Funktionskörper wird diese Liste um
zwei Elemente vergrößert und ausgegeben. Nach mehrmaligem Aufrufen der Funktion ist zu erkennen, dass es sich bei dem Default-Wert augenscheinlich immer um
dieselbe Instanz gehandelt hat.
Das liegt daran, dass eine Instanz, die als Default-Wert genutzt wird, nur einmalig
und nicht bei jedem Funktionsaufruf neu erzeugt wird. Grundsätzlich sollten Sie also
darauf verzichten, Instanzen veränderlicher Datentypen als Default-Werte zu verwenden. Schreiben Sie Ihre Funktionen stattdessen folgendermaßen:
def f(a=None):
if a is None:
a = [1,2,3]
Selbstverständlich können Sie anstelle von None eine Instanz eines beliebigen anderen immutablen Datentyps verwenden, ohne dass Seiteneffekte auftreten.
Namensräume
19.3 Namensräume
Bisher wurde ein Funktionskörper als abgekapselter Bereich betrachtet, der ausschließlich über Parameter bzw. den Rückgabewert Informationen mit dem Hauptprogramm austauschen kann. Das ist zunächst auch gar keine schlechte Sichtweise,
denn so hält man seine Schnittstelle »sauber«. In manchen Situationen ist es aber
sinnvoll, eine Funktion über ihren lokalen Namensraum hinaus wirken zu lassen,
was in diesem Kapitel thematisiert werden soll.
19.3.1 Zugriff auf globale Variablen – global
Zunächst einmal müssen zwei Begriffe unterschieden werden. Wenn wir uns im Kontext einer Funktion, also im Funktionskörper, befinden, dann können wir dort selbstverständlich Referenzen und Instanzen erzeugen und verwenden. Diese haben
jedoch nur unmittelbar in der Funktion selbst Gültigkeit. Sie existieren im lokalen
Namensraum. Im Gegensatz dazu existieren Referenzen des Hauptprogramms im
globalen Namensraum.
Begrifflich wird auch zwischen globalen Referenzen und lokalen Referenzen unterschieden. Dazu folgendes Beispiel:
def f():
a = "lokaler String"
b = "globaler String"
Die Unterscheidung zwischen globalem und lokalem Namensraum wird anhand des
folgenden Beispiels deutlich:
def f(a):
print(a)
a = 10
f(100)
In diesem Beispiel existiert sowohl im globalen als auch im lokalen Namensraum
eine Referenz namens a. Im globalen Namensraum referenziert sie die ganze Zahl 10
und im lokalen Namensraum der Funktion den übergebenen Parameter, in diesem
Fall die ganze Zahl 100. Es ist wichtig, zu verstehen, dass diese beiden Referenzen
nichts miteinander zu tun haben, da sie in verschiedenen Namensräumen existieren. Abbildung 19.2 fasst das Konzept der Namensräume zusammen.
7 Sie erinnern sich, dass beim Slicen einer Liste stets eine Kopie derselben erzeugt wird. Im Beispiel
wurde das Slicing ohne Angabe von Start- und Endindex verwendet, um eine vollständige Kopie
der Liste zu erzeugen.
276
277
19
19
Funktionen
def f( a , b ):
c = a + b
return c
def g( a , b ):
c = a * b
return c
a = 4
b = 7
f(47, 11)
g(13, 37)
19.3
Namensräume
Der lokale Namensraum der
Funktion f. Die Referenz c ist
lokal und nach außen nicht sichtbar.
Eine Funktion kann dennoch, mithilfe der global-Anweisung, schreibend auf eine
globale Referenz zugreifen. Dazu muss im Funktionskörper das Schlüsselwort global,
gefolgt von einer oder mehreren globalen Referenzen, geschrieben werden:
Der lokale Namensraum der
Funktion g. Die Referenzen a, b
und c sind unabhängig von den
gleichnamigen Referenzen aus dem
lokalen Namensraum der Funktion f.
def f():
global s
s = "lokaler String"
print(s)
Der globale Namensraum enthält
die Funktionsobjekte f und g sowie
die globalen Referenzen a und b,
die unabhängig von den Referenzen
der lokalen Namensräume sind.
s = "globaler String"
f()
print(s)
Die Ausgabe des Beispiels lautet:
Abbildung 19.2 Abgrenzung lokaler Namensräume vom globalen
Namensraum anhand eines Beispiels
19.3.2 Zugriff auf den globalen Namensraum
Im lokalen Namensraum eines Funktionskörpers kann jederzeit lesend auf eine globale Referenz zugegriffen werden, solange keine lokale Referenz gleichen Namens
existiert:
def f():
print(s)
s = "globaler String"
f()
Sobald versucht wird, schreibend auf eine globale Referenz zuzugreifen, wird stattdessen eine entsprechende lokale Referenz erzeugt:
def f():
s = "lokaler String"
print(s)
s = "globaler String"
f()
print(s)
Die Ausgabe dieses Beispiels lautet:
lokaler String
globaler String
278
lokaler String
lokaler String
Im Funktionskörper von f wird s explizit als globale Referenz gekennzeichnet und
kann fortan als solche verwendet werden.
19.3.3 Lokale Funktionen
Es ist möglich, lokale Funktionen zu definieren. Das sind Funktionen, die im lokalen
Namensraum einer anderen Funktion angelegt werden und nur dort gültig sind. Das
folgende Beispiel zeigt eine solche Funktion:
def globale_funktion(n):
def lokale_funktion(n):
return n**2
return lokale_funktion(n)
Innerhalb der globalen Funktion globale_funktion wurde eine lokale Funktion
namens lokale_funktion definiert. Beachten Sie, dass der jeweilige Parameter n trotz
des gleichen Namens nicht zwangsläufig denselben Wert referenziert. Die lokale
Funktion kann im Namensraum der globalen Funktion völlig selbstverständlich wie
jede andere Funktion auch aufgerufen werden.
Da sie einen eigenen Namensraum besitzt, hat die lokale Funktion keinen Zugriff auf
lokale Referenzen der globalen Funktion. Um dennoch einige ausgewählte Referenzen an die lokale Funktion durchzuschleusen, bedient man sich eines Tricks mit vorbelegten Funktionsparametern:
def globale_funktion(n):
def lokale_funktion(n=n):
279
19
19
Funktionen
return n**2
return lokale_funktion()
Wie Sie sehen, muss der lokalen Funktion der Parameter n beim Aufruf nicht mehr
explizit übergeben werden. Er wird vielmehr implizit in Form eines vorbelegten Parameters übergeben.
19.3.4 Zugriff auf übergeordnete Namensräume – nonlocal
Im letzten Abschnitt haben wir von den zwei existierenden Namensräumen, dem
globalen und dem lokalen, gesprochen. Diese Unterteilung ist richtig, unterschlägt
aber einen interessanten Fall, denn laut Abschnitt 19.3.3, »Lokale Funktionen«, dürfen auch lokale Funktionen innerhalb von Funktionen definiert werden. Lokale
Funktionen bringen natürlich wieder ihren eigenen lokalen Namensraum im lokalen
Namensraum der übergeordneten Funktion mit. Bei verschachtelten Funktionsdefinitionen kann man die Welt der Namensräume also nicht in eine lokale und eine
globale Ebene unterteilen. Dennoch stellt sich auch hier die Frage, wie eine lokale
Funktion auf Referenzen zugreifen kann, die im lokalen Namensraum der übergeordneten Funktion liegen.
Das Schlüsselwort global hilft dabei nicht weiter, denn es erlaubt nur den Zugriff auf
den äußersten, globalen Namensraum. Für diesen Zweck existiert seit Python 3.0 das
Schlüsselwort nonlocal.
Betrachten wir dazu einmal folgendes Beispiel:
def funktion1():
def funktion2():
nonlocal res
res += 1
res = 1
funktion2()
print(res)
Innerhalb der Funktion funktion1 wurde eine lokale Funktion funktion2 definiert, die
die Referenz res aus dem lokalen Namensraum von funktion1 inkrementieren soll.
Dazu muss res innerhalb von funktion2 als nonlocal gekennzeichnet werden. Die
Schreibweise lehnt sich an den Zugriff auf Referenzen aus dem globalen Namensraum via global an.
Nachdem funktion2 definiert wurde, wird res im lokalen Namensraum von funktion1
definiert und mit dem Wert 1 verknüpft. Schließlich wird die lokale Funktion funktion2 aufgerufen und der Wert von res ausgegeben. Im Beispiel gibt funktion1 den
Wert 2 aus.
19.4
Anonyme Funktionen
Das Schlüsselwort nonlocal lässt sich auch bei mehreren, ineinander verschachtelten
Funktionen verwenden, wie folgende Erweiterung unseres Beispiels zeigt:
def funktion1():
def funktion2():
def funktion3():
nonlocal res
res += 1
nonlocal res
funktion3()
res += 1
res = 1
funktion2()
print(res)
Nun wurde eine zusätzliche lokale Funktion im lokalen Namensraum von funktion2
definiert. Auch aus dem lokalen Namensraum von funktion3 heraus lässt sich res
mithilfe von nonlocal inkrementieren. Die Funktion funktion1 gibt in diesem Beispiel den Wert 3 aus.
Allgemein funktioniert nonlocal bei tieferen Funktionsverschachtelungen so, dass es
in der Hierarchie der Namensräume aufsteigt und die erste Referenz mit dem angegebenen Namen in den Namensraum des nonlocal-Schlüsselworts einbindet.
19.4 Anonyme Funktionen
19
Beim Sortieren einer Liste mit der Built-in Function sorted kann eine Funktion übergeben werden, die die Ordnungsrelation der Elemente beschreibt. Auf diese Weise
lassen sich die Elemente nach selbst definierten Kriterien sortieren:
>>> def s(x):
...
return -x
...
>>> sorted([1,4,7,3,5], key=s)
[7, 5, 4, 3, 1]
In diesem Fall wurde die Funktion s definiert, die einen übergebenen Wert negiert,
um damit die Liste in absteigender Reihenfolge zu sortieren. Funktionen wie s, die in
einem solchen oder ähnlichen Kontext verwendet werden, sind in der Regel sehr einfach und werden definiert, verwendet und dann vergessen.
Mithilfe des Schlüsselwortes lambda kann stattdessen eine kleine, anonyme Funktion
erstellt werden:
s = lambda x: -x
280
281
19
Funktionen
Auf das Schlüsselwort lambda folgen eine Parameterliste und ein Doppelpunkt. Hinter dem Doppelpunkt muss ein beliebiger arithmetischer oder logischer Ausdruck
stehen, dessen Ergebnis von der anonymen Funktion zurückgegeben wird. Beachten
Sie, dass die Beschränkung auf einen arithmetischen Ausdruck zwar die Verwendung
von Kontrollstrukturen ausschließt, nicht aber die Verwendung einer Conditional
Expression.
Eine lambda-Form ergibt ein Funktionsobjekt und kann wie gewohnt aufgerufen werden: s(10). Der Rückgabewert wäre in diesem Fall -10. Wie der Name schon andeutet,
werden anonyme Funktionen jedoch in der Regel verwendet, ohne ihnen einen
Namen zuzuweisen. Ein Beispiel dafür liefert das eingangs beschriebene Sortierproblem:
>>> sorted([1,4,7,3,5], key=lambda x: -x)
[7, 5, 4, 3, 1]
Betrachten wir noch ein etwas komplexeres Beispiel einer anonymen Funktion mit
drei Parametern:
f = lambda x, y, z: (x - y) * z
Anonyme Funktionen können aufgerufen werden, ohne sie vorher zu referenzieren.
Dazu muss der lambda-Ausdruck in Klammern gesetzt werden:
(lambda x, y, z: (x - y) * z)(1, 2, 3)
19.5 Annotationen
Die Elemente einer Funktionsschnittstelle, also die Funktionsparameter und der
Rückgabewert, lassen sich mit Anmerkungen, sogenannten Annotationen, versehen:
def funktion(p1: Annotation1, p2: Annotation2) -> Annotation3:
Funktionskörper
Bei der Definition einer Funktion kann hinter jeden Parameter ein Doppelpunkt,
gefolgt von einer Annotation, geschrieben werden. Eine Annotation darf dabei ein
beliebiger Python-Ausdruck sein. Die Angabe einer Annotation ist optional. Hinter
der Parameterliste kann eine ebenfalls optionale Annotation für den Rückgabewert
der Funktion geschrieben werden. Diese wird durch einen Pfeil (->) eingeleitet. Erst
hinter dieser Annotation folgt der Doppelpunkt, der den Funktionskörper einleitet.
Annotationen ändern an der Ausführung einer Funktion nichts, man könnte sagen:
Dem Python-Interpreter sind Annotationen egal. Das Interessante an ihnen ist, dass
man sie über das Attribut __annotations__ des Funktionsobjekts auslesen kann. Da
282
19.5
Annotationen
Annotationen beliebige Ausdrücke sein dürfen, kann der Programmierer hier also
eine Information pro Parameter und Rückgabewert »speichern«, auf die er zu einem
späteren Zeitpunkt – beispielsweise, wenn die Funktion mit konkreten Parameterwerten aufgerufen wird – zurückkommt.
Dabei werden die Annotationen über das Attribut __annotations__ in Form eines Dictionarys zugänglich gemacht. Dieses Dictionary enthält die Parameternamen bzw.
"return" für die Annotation des Rückgabewertes als Schlüssel und die jeweiligen
Annotation-Ausdrücke als Werte. Für die oben dargestellte schematische Funktionsdefinition sieht dieses Dictionary also folgendermaßen aus:
funktion.__annotations__ =
{
"p1" : Annotation1,
"p2" : Annotation2,
"return" : Annotation3
}
Mit Function Annotations könnten Sie also beispielsweise eine Typüberprüfung an
der Funktionsschnittstelle durchführen. Dazu definieren wir zunächst eine Funktion
samt Annotationen:
def strmult(s: str, n: int) -> str:
return s*n
Die Funktion strmult hat die Aufgabe, einen String s n-mal hintereinander geschrieben zurückzugeben. Das geschieht durch Multiplikation von s und n.
Wir schreiben jetzt eine Funktion call, die dazu in der Lage ist, eine beliebige Funktion, deren Schnittstelle vollständig durch Annotationen beschrieben ist, aufzurufen
bzw. eine Exception zu werfen, wenn einer der übergebenen Parameter einen
falschen Typ hat:
def call(f, **kwargs):
for arg in kwargs:
if arg not in f.__annotations__:
raise TypeError("Parameter '{}'"
" unbekannt".format(arg))
if not isinstance(kwargs[arg], f.__annotations__[arg]):
raise TypeError("Parameter '{}'"
" hat ungültigen Typ".format(arg))
ret = f(**kwargs)
if type(ret) != f.__annotations__["return"]:
raise TypeError("Ungültiger Rückgabewert")
return ret
283
19
19
Funktionen
19.7
Eingebaute Funktionen
Die Funktion call bekommt ein Funktionsobjekt und beliebig viele Schlüsselwortparameter übergeben. Dann greift sie für jeden übergebenen Schlüsselwortparameter
auf das Annotation-Dictionary des Funktionsobjekts f zu und prüft, ob ein Parameter dieses Namens überhaupt in der Funktionsdefinition von f vorkommt und –
wenn ja – ob die für diesen Parameter übergebene Instanz den richtigen Typ hat. Ist
eines von beidem nicht der Fall, wird eine entsprechende Exception geworfen.
Es soll nicht Sinn und Zweck dieses Abschnitts sein, vollständig in die Thematik der
Rekursion einzuführen. Stattdessen möchten wir Ihnen hier nur einen kurzen Überblick geben. Sollten Sie das Beispiel nicht auf Anhieb verstehen, seien Sie nicht entmutigt, denn es lässt sich auch ohne Rekursion passabel in Python programmieren.
Trotzdem sollten Sie nicht leichtfertig über die Rekursion hinwegsehen, denn es handelt sich dabei um einen interessanten Weg, sehr elegante Programme zu schreiben.8
Wenn alle Parameter korrekt übergeben wurden, wird das Funktionsobjekt f aufgerufen und der Rückgabewert gespeichert. Dessen Typ wird dann mit dem Datentyp
verglichen, der in der Annotation für den Rückgabewert angegeben wurde; wenn er
abweicht, wird eine Exception geworfen. Ist alles gut gegangen, wird der Rückgabewert der Funktion f von call durchgereicht:
19.7 Eingebaute Funktionen
>>> call(strmult, s="Hallo", n=3)
'HalloHalloHallo'
>>> call(strmult, s="Hallo", n="Welt")
Traceback (most recent call last):
[…]
TypeError: Parameter 'n' hat ungültigen Typ
>>> call(strmult, s=13, n=37)
Traceback (most recent call last):
[…]
TypeError: Parameter 's' hat ungültigen Typ
Um die Überprüfung auf den Rückgabewert testen zu können, muss natürlich die
Definition der Funktion strmult verändert werden.
Es war im Laufe des Buches schon oft von eingebauten Funktionen oder Built-in Functions die Rede. Das sind vordefinierte Funktionen, die dem Programmierer jederzeit
zur Verfügung stehen. Sie kennen zum Beispiel bereits die Built-in Functions len und
range. Im Folgenden werden alle bisher relevanten Built-in Functions ausführlich
beschrieben. Beachten Sie, dass es noch weitere eingebaute Funktionen gibt, die an
dieser Stelle nicht besprochen werden können, da sie Konzepte der objektorientierten Programmierung voraussetzen. Eine vollständige Übersicht über alle in Python
eingebauten Funktionen finden Sie im Anhang dieses Buches (Abschnitt A.2).
Built-in Function
Beschreibung
Abschnitt
abs(x)
Berechnet den Betrag der Zahl x.
19.7.1
all(iterable)
Prüft, ob alle Elemente des iterierbaren
Objekts iterable den Wert True ergeben.
19.7.2
any(iterable)
Prüft, ob mindestens ein Element des
iterierbaren Objekts iterable den Wert
True ergibt.
19.7.3
ascii(object)
Erzeugt einen druckbaren String, der das
Objekt object beschreibt. Dabei werden
Sonderzeichen maskiert, sodass die Ausgabe nur ASCII-Zeichen enthält.
19.7.4
bin(x)
Gibt einen String zurück, der die Ganzzahl x
als Binärzahl darstellt.
19.7.5
bool([x])
Erzeugt einen booleschen Wert.
19.7.6
19
19.6 Rekursion
Python erlaubt es dem Programmierer, sogenannte rekursive Funktionen zu schreiben. Das sind Funktionen, die sich selbst aufrufen. Die aufgerufene Funktion ruft sich
so lange selbst auf, bis eine Abbruchbedingung diese – sonst endlose – Rekursion
beendet. Die Anzahl der verschachtelten Funktionsaufrufe wird Rekursionstiefe
genannt und ist von der Laufzeitumgebung auf einen bestimmten Wert begrenzt.
Im folgenden Beispiel wurde eine rekursive Funktion zur Berechnung der Fakultät
einer ganzen Zahl geschrieben:
def fak(n):
if n > 0:
return fak(n - 1) * n
else:
return 1
284
Tabelle 19.1 Built-in Functions, die in diesem Abschnitt besprochen werden
8 Jede rekursive Funktion kann, unter Umständen mit viel Aufwand, in eine iterative umgeformt
werden. Eine iterative Funktion ruft sich selbst nicht auf, sondern löst das Problem allein durch
Einsatz von Kontrollstrukturen, speziell Schleifen. Eine rekursive Funktion ist oft eleganter und
kürzer als ihr iteratives Ebenbild, in der Regel aber auch langsamer.
285
19
Funktionen
19.7
Eingebaute Funktionen
Built-in Function
Beschreibung
Abschnitt
Built-in Function
Beschreibung
Abschnitt
bytearray([source,
encoding, errors])
Erzeugt eine neue bytearray-Instanz.
19.7.7
hex(x)
Gibt den Hexadezimalwert der ganzen Zahl
x in Form eines Strings zurück.
19.7.23
bytes([source,
encoding, errors])
Erzeugt eine neue bytes-Instanz.
19.7.8
id(object)
Gibt die Identität der Instanz object zurück.
19.7.24
input([prompt])
Liest einen String von der Tastatur ein.
19.7.25
chr(i)
Gibt das Zeichen mit dem Unicode-Codepoint i zurück.
19.7.9
int(x, [base])
Erzeugt eine ganze Zahl.
19.7.26
complex([real, imag])
Erzeugt eine komplexe Zahl.
19.7.10
len(s)
Gibt die Länge einer Instanz s zurück.
19.7.27
dict([arg])
Erzeugt ein Dictionary.
19.7.11
list([iterable])
Erzeugt eine Liste.
19.7.28
divmod(a, b)
Gibt ein Tupel mit dem Ergebnis einer
Ganzzahldivision und dem Rest zurück.
19.7.12
locals()
Gibt ein Dictionary zurück, das alle Referenzen des lokalen Namensraums enthält.
19.7.29
map(function,
[*iterables])
Wendet die Funktion function auf jedes
Element der übergebenen iterierbaren
Objekte an.
19.7.30
max(iterable, {default,
key})
max(arg1, arg2, [*args],
{key})
Gibt das größte Element von iterable
zurück.
19.7.31
min(iterable, {default,
key})
min(arg1, arg2, [*args],
{key})
Gibt das kleinste Element von iterable
zurück.
19.7.32
oct(x)
Gibt den Oktalwert der ganzen Zahl x in
Form eines Strings zurück.
19.7.33
open(file, [mode,
buffering, encoding,
errors, newline,
closefd])
Erzeugt ein Dateiobjekt.
6.4.1
ord(c)
Gibt den Unicode-Code des Zeichens c
zurück.
19.7.34
pow(x, y, [z])
Führt eine Potenzoperation durch.
19.7.35
print([*objects], {sep,
end, file})
Gibt die übergebenen Objekte auf dem
Bildschirm oder in andere Ausgabeströme
aus.
19.7.36
divmod(a, b) ist äquivalent zu
(a // b, a % b)
enumerate(iterable,
[start])
Gibt einen Aufzählungsiterator für das
übergebene iterierbare Objekt zurück.
19.7.13
eval(expression,
[globals, locals])
Wertet den Python-Ausdruck expression
aus.
19.7.14
exec(object, [globals,
locals])
Führt einen Python-Code aus.
19.7.15
filter(function,
iterable)
Ermöglicht es, bestimmte Elemente eines
iterierbaren Objekts herauszufiltern.
19.7.16
float([x])
Erzeugt eine Gleitkommazahl.
19.7.17
format(value,
[format_spec])
Formatiert einen Wert value mit der
Formatangabe format_spec.
19.7.18
frozenset([iterable])
Erzeugt eine unveränderliche Menge.
19.7.19
globals()
Gibt ein Dictionary mit allen Referenzen
des globalen Namensraums zurück.
19.7.20
Gibt den Hash-Wert der Instanz object
zurück.
19.7.21
Startet die eingebaute interaktive Hilfe von
Python.
19.7.22
hash(object)
help([object])
19
Tabelle 19.1 Built-in Functions, die in diesem Abschnitt besprochen werden (Forts.)
Tabelle 19.1 Built-in Functions, die in diesem Abschnitt besprochen werden (Forts.)
286
287
19
Funktionen
19.7
Built-in Function
Beschreibung
Abschnitt
range([start], stop,
[step])
Erzeugt einen Iterator über eine Zahlenfolge von start bis stop.
19.7.37
repr(object)
Gibt eine String-Repräsentation der Instanz
object zurück.
19.7.38
reversed(seq)
Erzeugt einen Iterator, der das iterierbare
Objekt seq rückwärts durchläuft.
19.7.39
round(x, [n])
Rundet die Zahl x auf n Nachkommastellen.
19.7.40
set([iterable])
Erzeugt eine Menge.
19.7.41
sorted(iterable, [key,
reverse])
Sortiert das iterierbare Objekt iterable.
19.7.42
str([object, encoding,
errors])
Erzeugt einen String.
19.7.43
sum(iterable, [start])
Gibt die Summe aller Elemente des iterierbaren Objekts iterable zurück.
19.7.44
tuple([iterable])
Erzeugt ein Tupel.
19.7.45
type(object)
Gibt den Datentyp einer Instanz zurück.
19.7.46
zip([*iterables])
Fasst mehrere Sequenzen zu Tupeln
zusammen, um sie beispielsweise mit einer
for-Schleife zu durchlaufen.
19.7.47
Tabelle 19.1 Built-in Functions, die in diesem Abschnitt besprochen werden (Forts.)
Eingebaute Funktionen
19.7.2 all(iterable)
Die Funktion all gibt immer dann True zurück, wenn alle Elemente des als Parameter
übergebenen iterierbaren Objekts, also beispielsweise einer Liste oder eines Tupels,
den Wahrheitswert True ergeben. Sie wird folgendermaßen verwendet:
>>> all([True, True, False])
False
>>> all([True, True, True])
True
Das übergebene iterierbare Objekt muss nicht zwingend nur bool-Instanzen durchlaufen. Instanzen anderer Datentypen werden nach den Regeln aus Abschnitt 12.6.2,
»Wahrheitswerte nicht-boolescher Datentypen«, in Wahrheitswerte überführt.
19.7.3 any(iterable)
Die Funktion any arbeitet ähnlich wie all. Sie gibt immer dann True zurück, wenn
mindestens ein Element des als Parameter übergebenen iterierbaren Objekts, also
zum Beispiel einer Liste oder eines Tupels, den Wahrheitswert True ergibt. Sie wird
folgendermaßen verwendet:
>>> any([True, False, False])
True
>>> any([False, False, False])
False
19
Das übergebene iterierbare Objekt muss nicht zwingend nur bool-Instanzen durchlaufen. Instanzen anderer Datentypen werden nach den Regeln aus Abschnitt 12.6.2,
»Wahrheitswerte nicht-boolescher Datentypen«, in Wahrheitswerte überführt.
19.7.1 abs(x)
Die Funktion abs berechnet den Betrag von x. Der Parameter x muss dabei ein numerischer Wert sein, also eine Instanz der Datentypen int, float, bool oder complex.
>>> abs(1)
1
>>> abs(-12.34)
12.34
>>> abs(3 + 4j)
5.0
288
19.7.4 ascii(object)
Die Funktion ascii gibt eine lesbare Entsprechung der Instanz object in Form eines
Strings zurück. Im Gegensatz zu der für denselben Zweck existierenden Built-in
Function repr enthält der von ascii zurückgegebene String ausschließlich Zeichen
des ASCII-Zeichensatzes:
>>> ascii(range(0, 10))
'range(0, 10)'
>>> ascii("Püthon")
"'P\\xfcthon'"
>>> repr("Püthon")
"'Püthon'"
289
19
Funktionen
19.7.5 bin(x)
Die Funktion bin gibt einen String zurück, der die für x übergebene ganze Zahl in
ihrer Binärdarstellung enthält:
19.7
Eingebaute Funktionen
Außerdem kann für source eine beliebige Instanz eines Datentyps übergeben werden, der das sogenannte Buffer-Protokoll unterstützt. Das sind beispielsweise die
Datentypen bytes und bytearray selbst.
>>> bin(123)
'0b1111011'
>>> bin(-12)
'-0b1100'
>>> bin(0)
'0b0'
>>> bytearray("äöü", "utf-8")
bytearray(b'\xc3\xa4\xc3\xb6\xc3\xbc')
>>> bytearray([1,2,3,4])
bytearray(b'\x01\x02\x03\x04')
>>> bytearray(10)
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
19.7.6 bool([x])
Näheres zum Datentyp bytearray erfahren Sie in Abschnitt 13.4, »Strings – str, bytes,
bytearray«.
Hiermit wird eine Instanz des Datentyps bool mit dem Wahrheitswert der Instanz x
erzeugt. Der Wahrheitswert von x wird nach den in Abschnitt 12.6.2, »Wahrheitswerte
nicht-boolescher Datentypen«, festgelegten Regeln bestimmt.
>>> bool("")
False
>>> bool("Python")
True
Wenn kein Parameter übergeben wurde, gibt die Funktion bool den booleschen Wert
False zurück.
19.7.7 bytearray([source, encoding, errors])
Die Funktion bytearray erzeugt eine Instanz des Datentyps bytearray, der eine Sequenz von Byte-Werten darstellt, also ganzen Zahlen im Zahlenbereich von 0 bis 255.
Beachten Sie, dass bytearray im Gegensatz zu bytes ein veränderlicher Datentyp ist.
Der Parameter source wird zum Initialisieren des Byte-Arrays verwendet und kann
verschiedene Bedeutungen haben:
Wenn für source ein String übergeben wird, wird dieser mithilfe der Parameter encoding und errors in eine Byte-Folge codiert und dann zur Initialisierung des ByteArrays verwendet. Die Parameter encoding und errors haben die gleiche Bedeutung
wie bei der Built-in Function str.
Wenn für source eine ganze Zahl übergeben wird, wird ein Byte-Array der Länge
source angelegt und mit Nullen gefüllt.
Wenn für source ein iterierbares Objekt, beispielsweise eine Liste, übergeben wird,
wird das Byte-Array mit den Elementen gefüllt, über die source iteriert. Beachten Sie,
dass es sich dabei um ganze Zahlen aus dem Zahlenbereich von 0 bis 255 handeln
muss.
290
19.7.8 bytes([source, encoding, errors])
Hiermit wird eine Instanz des Datentyps bytes9 erzeugt, der, wie der Datentyp
bytearray, eine Folge von Byte-Werten speichert. Im Gegensatz zu bytearray handelt
es sich aber um einen unveränderlichen Datentyp, weswegen wir auch von einem
bytes-String sprechen.
Die Parameter source, encoding und errors werden wie bei der Built-in Function
bytearray zur Initialisierung der Byte-Folge verwendet:
>>> bytes(10)
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
>>> bytes([1,2,3])
b'\x01\x02\x03'
>>> bytes("äöü", "utf-8")
b'\xc3\xa4\xc3\xb6\xc3\xbc'
19
19.7.9 chr(i)
Die Funktion chr gibt einen String der Länge 1 zurück, der das Zeichen mit dem Unicode-Codepoint i enthält:
>>> chr(65)
'A'
>>> chr(33)
'!'
>>> chr(8364)
'€'
9 siehe Abschnitt 13.4.4, »Zeichensätze und Sonderzeichen«
291
19
Funktionen
19.7.10 complex([real, imag])
Hiermit wird eine Instanz des Datentyps complex10 zur Speicherung einer komplexen
Zahl erzeugt. Die erzeugte Instanz hat den komplexen Wert real + imag · j. Fehlende
Parameter werden als 0 angenommen.
Außerdem ist es möglich, der Funktion complex einen String zu übergeben, der das
Literal einer komplexen Zahl enthält. In diesem Fall darf jedoch kein weiterer Parameter angegeben werden.
>>> complex(1, 3)
(1+3j)
>>> complex(1.2, 3.5)
(1.2+3.5j)
>>> complex("3+4j")
(3+4j)
>>> complex("3")
(3+0j)
Beachten Sie, dass ein eventuell übergebener String keine Leerzeichen um den +-Operator enthalten darf:
>>> complex("3 + 4j")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: complex() arg is a malformed string
Leerzeichen am Anfang oder Ende des Strings sind aber kein Problem.
19.7.11 dict([source])
Hiermit wird eine Instanz des Datentyps dict11 erzeugt. Wenn kein Parameter übergeben wird, wird ein leeres Dictionary erstellt. Durch einen der folgenden Aufrufe ist
es möglich, das Dictionary beim Erzeugen mit Werten zu füllen:
왘 Wenn source ein Dictionary ist, werden die Schlüssel und Werte dieses Dictionarys
in das neue übernommen. Beachten Sie, dass dabei keine Kopien der Werte entstehen, sondern diese weiterhin dieselben Instanzen referenzieren.
>>> dict({"a" : 1, "b" : 2})
{'a': 1, 'b': 2}
19.7
Eingebaute Funktionen
왘 Alternativ kann source ein über Tupel iterierendes Objekt sein, wobei jedes Tupel
zwei Elemente enthalten muss: den Schlüssel und den damit assoziierten Wert.
Die Liste muss die Struktur [("a", 1), ("b", 2)] haben:
>>> dict([("a", 1), ("b", 2)])
{'a': 1, 'b': 2}
왘 Zudem erlaubt es dict, Schlüssel und Werte als Keyword Arguments zu übergeben.
Der Parametername wird dabei in einen String geschrieben und als Schlüssel verwendet. Beachten Sie, dass Sie damit bei der Namensgebung den Beschränkungen
eines Bezeichners unterworfen sind:
>>> dict(a=1, b=2)
{'a': 1, 'b': 2}
19.7.12 divmod(a, b)
Die Funktion divmod gibt folgendes Tupel zurück: (a//b, a%b). Mit Ausnahme von
complex können für a und b Instanzen beliebiger numerischer Datentypen übergeben
werden:
>>> divmod(2.5, 1.3)
(1.0, 1.2)
>>> divmod(11, 4)
(2, 3)
19
19.7.13 enumerate(iterable)
Die Funktion enumerate erzeugt ein iterierbares Objekt, das nicht allein über die Elemente von iterable iteriert, sondern über Tupel der Form (i, iterable[i]). Dabei ist
i ein Schleifenzähler, der bei 0 beginnt. Die Schleife wird beendet, wenn i den Wert
len(iterable)-1 hat. Diese Tupelstrukturen werden deutlich, wenn man das Ergebnis
eines enumerate-Aufrufs in eine Liste konvertiert:
>>> list(enumerate(["a", "b", "c", "d"]))
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]
Damit eignet sich enumerate besonders für for-Schleifen, in denen ein numerischer
Schleifenzähler mitgeführt werden soll. Innerhalb einer for-Schleife kann enumerate
folgendermaßen verwendet werden:
for i, wert in enumerate(iterable):
print("Der Wert von iterable an", i, "ter Stelle ist:", wert)
10 siehe Abschnitt 12.7, »Komplexe Zahlen – complex«
11 siehe Abschnitt 14.1, »Dictionary – dict«
292
Angenommen, der oben dargestellte Code wird für eine Liste iterable = [1,2,3,4,5]
ausgeführt, kommt folgende Ausgabe zustande:
293
19
Funktionen
Der
Der
Der
Der
Der
Wert
Wert
Wert
Wert
Wert
19.7
von
von
von
von
von
iterable
iterable
iterable
iterable
iterable
an
an
an
an
an
0
1
2
3
4
ter
ter
ter
ter
ter
Stelle
Stelle
Stelle
Stelle
Stelle
ist:
ist:
ist:
ist:
ist:
1
2
3
4
5
19.7.14 eval(expression, [globals, locals])
Die Funktion eval wertet den in Form eines Strings vorliegenden Python-Ausdruck
expression aus und gibt dessen Ergebnis zurück:
>>> eval("1+1")
2
Beim Aufruf von eval können der gewünschte globale und lokale Namensraum, in
denen der Ausdruck ausgewertet werden soll, über die Parameter globals und locals
angegeben werden. Wenn diese Parameter nicht angegeben wurden, wird expression
in der Umgebung ausgewertet, in der eval aufgerufen wurde:
>>> x = 12
>>> eval("x**2")
144
Eingebaute Funktionen
>>> exec(code)
144
Beim Aufruf von exec können der gewünschte globale und lokale Namensraum, in
denen der Code ausgeführt werden soll, über die Parameter globals und locals angegeben werden. Wenn diese Parameter nicht angegeben wurden, wird der Code in der
Umgebung ausgeführt, in der exec aufgerufen wurde.
Hinweis
Für exec gilt die gleiche Sicherheitswarnung wie für eval aus dem vorangegangenen
Abschnitt: Prüfen Sie Benutzereingaben genau, bevor sie an exec weitergeleitet
werden!
19.7.16 filter(function, iterable)
Die Funktion filter erwartet ein Funktionsobjekt als ersten und ein iterierbares
Objekt als zweiten Parameter. Der Parameter function muss eine Funktion oder
Lambda-Form (siehe Abschnitt 19.4, »Anonyme Funktionen«) sein, die einen Parameter erwartet und einen booleschen Wert zurückgibt.
Manchmal wird eval dazu verwendet, Benutzereingaben als Python-Code zu interpretieren:
Die Funktion filter ruft für jedes Element des iterierbaren Objekts iterable die
Funktion function auf und erzeugt ein iterierbares Objekt, das alle Elemente von list
durchläuft, für die function den Wert True zurückgegeben hat. Dies soll an folgendem
Beispiel erklärt werden, in dem filter dazu verwendet wird, aus einer Liste von ganzen Zahlen die ungeraden Zahlen herauszufiltern:
>>> eval(input("Geben Sie Python-Code ein: "))
Geben Sie Python-Code ein: 2**4
16
>>> filterobj = filter(lambda x: x%2 == 0, range(21))
>>> print(list(filterobj))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
Hinweis
Bitte beachten Sie, dass diese Verwendung von eval potentiell gefährlich ist, wenn
die Benutzereingaben nicht sorgfältig geprüft werden. Ein bösartiger Benutzer kann
hier die Programmausführung manipulieren.
19.7.15 exec(object, [globals, locals])
19.7.17 float([x])
Hiermit wird eine Instanz des Datentyps float12 erzeugt. Wenn der Parameter x nicht
angegeben wurde, wird der Wert der Instanz mit 0.0, andernfalls mit dem übergebenen Wert initialisiert. Mit Ausnahme von complex können Instanzen alle numerischen Datentypen für x übergeben werden.
Die Funktion exec führt einen als String vorliegenden Python-Code aus:
>>>
...
...
...
code = """
x = 12
print(x**2)
"""
>>> float()
0.0
>>> float(5)
5.0
12 siehe Abschnitt 12.5, »Gleitkommazahlen – float«
294
295
19
19
Funktionen
Außerdem ist es möglich, für x einen String zu übergeben, der eine Gleitkommazahl
enthält:
>>> float("1e30")
1e+30
>>> float("0.5")
0.5
19.7.18 format(value, [format_spec])
Die Funktion format gibt den Wert value gemäß der Formatangabe format_spec zurück. Beispielsweise lässt sich ein Geldbetrag bei der Ausgabe folgendermaßen auf
zwei Nachkommastellen runden:
>>> format(1.23456, ".2f") + "€"
'1.23€'
Ausführliche Informationen zu Formatangaben finden Sie in Abschnitt 13.4.3 über
String-Formatierungen.
19.7.19 frozenset([iterable])
Hiermit wird eine Instanz des Datentyps frozenset13 zum Speichern einer unveränderlichen Menge erzeugt. Wenn der Parameter iterable angegeben wurde, werden
die Elemente der erzeugten Menge diesem iterierbaren Objekt entnommen. Wenn
der Parameter iterable nicht angegeben wurde, erzeugt frozenset eine leere Menge.
Beachten Sie zum einen, dass ein frozenset keine veränderlichen Elemente enthalten
darf, und zum anderen, dass jedes Element nur einmal in einer Menge vorkommen
kann.
>>> frozenset()
frozenset()
>>> frozenset({1,2,3,4,5})
frozenset({1, 2, 3, 4, 5})
>>> frozenset("Pyyyyyyython")
frozenset({'h', 'o', 'n', 'P', 't', 'y'})
19.7
Eingebaute Funktionen
>>> a = 1
>>> b = {}
>>> c = [1,2,3]
>>> globals()
{'a': 1, 'c': [1, 2, 3], 'b': {}, '__builtins__': <module 'builtins'
(built-in)>, '__package__': None, '__name__': '__main__', '__doc__': None}
Das zurückgegebene Dictionary enthält neben den vorher angelegten noch weitere
Referenzen, die im globalen Namensraum existieren. Diese vordefinierten Referenzen haben wir bisher noch nicht besprochen, lassen Sie sich davon also nicht stören.
19.7.21 hash(object)
Die Funktion hash berechnet den Hash-Wert der Instanz object und gibt ihn zurück.
Bei einem Hash-Wert handelt es sich um eine ganze Zahl, die aus Typ und Wert der
Instanz erzeugt wird. Ein solcher Wert wird verwendet, um effektiv zwei komplexere
Instanzen auf Gleichheit prüfen zu können. So werden beispielsweise die Schlüssel
eines Dictionarys intern durch ihre Hash-Werte verwaltet.
>>> hash(12345)
12345
>>> hash("Hallo Welt")
-962533610
>>> hash((1,2,3,4))
89902565
19
Beachten Sie den Unterschied zwischen veränderlichen (mutablen) und unveränderlichen (immutablen) Instanzen. Aus Letzteren kann zwar formal auch ein Hash-Wert
errechnet werden, dieser wäre aber nur so lange gültig, wie die Instanz nicht verändert wurde. Aus diesem Grund ist es nicht sinnvoll, Hash-Werte von veränderlichen
Instanzen zu berechnen; veränderliche Instanzen sind »unhashable«:
>>> hash([1,2,3,4])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
19.7.20 globals()
Hinweis
Die Built-in Function globals gibt ein Dictionary mit allen globalen Referenzen des
aktuellen Namensraums zurück. Die Schlüssel entsprechen den Referenznamen als
Strings und die Werte den jeweiligen Instanzen.
Seit Python 3.3 werden Hash-Werte von str-, bytes- und datetime-Instanzen aus
Sicherheitsgründen randomisiert. Das bedeutet, dass sich Hash-Werte dieser Datentypen in zwei verschiedenen Interpreter-Prozessen unterscheiden. Innerhalb desselben Prozesses ändern sie sich aber nicht.
13 siehe Abschnitt 15.1, »Die Datentypen set und frozenset«
296
297
19
Funktionen
19.7.22 help([object])
Die Funktion help startet die interaktive Hilfe von Python. Wenn der Parameter
object ein String ist, wird dieser im Hilfesystem nachgeschlagen. Sollte es sich um
eine andere Instanz handeln, wird eine dynamische Hilfeseite zu dieser generiert.
19.7.23 hex(x)
Die Funktion hex erzeugt einen String, der die als Parameter x übergebene ganze Zahl
in Hexadezimalschreibweise enthält. Die Zahl entspricht, wie sie im String erscheint,
dem Python-Literal für Hexadezimalzahlen.
>>> hex(12)
'0xc'
>>> hex(0xFF)
'0xff'
>>> hex(-33)
'-0x21'
19.7.24 id(object)
Die Funktion id gibt die Identität einer beliebigen Instanz zurück. Bei der Identität
einer Instanz handelt es sich um eine ganze Zahl, die die Instanz eindeutig identifiziert.
19.7
Eingebaute Funktionen
Hinweis
Das Verhalten der Built-in Function input wurde mit Python 3.0 verändert. In früheren Versionen wurde die Eingabe des Benutzers als Python-Code vom Interpreter
ausgeführt und das Ergebnis dieser Ausführung in Form eines Strings zurückgegeben. Die »alte« input-Funktion entsprach also folgendem Code:
>>> eval(input("Prompt: "))
Prompt: 2+2
4
Die input-Funktion, wie sie in aktuellen Versionen von Python existiert, hieß in früheren Versionen raw_input.
19.7.26 int([x, base])
Hiermit wird eine Instanz des Datentyps int14 erzeugt. Die Instanz kann durch
Angabe von x mit einem Wert initialisiert werden. Wenn kein Parameter angegeben
wird, erhält die erzeugte Instanz den Wert 0.
Wenn der Parameter x als String übergeben wird, erwartet die Funktion int, dass dieser String den gewünschten Wert der Instanz enthält. Durch den optionalen Parameter base kann die Basis des Zahlensystems angegeben werden, in dem die Zahl
geschrieben wurde.
Näheres zu Identitäten erfahren Sie in Abschnitt 7.1.3.
>>> int(5)
5
>>> int("FF", 16)
255
>>> int(hex(12), 16)
12
19.7.25 input([prompt])
19.7.27 len(s)
Die Funktion input liest eine Eingabe vom Benutzer ein und gibt sie in Form eines
Strings zurück. Der Parameter prompt ist optional. Hier kann ein String angegeben
werden, der vor der Eingabeaufforderung ausgegeben werden soll.
Die Funktion len gibt die Länge bzw. die Anzahl der Elemente von s zurück. Für s können Sequenzen, Mappings oder Mengen übergeben werden.
>>> id(1)
134537016
>>> id(2)
134537004
>>> s = input("Geben Sie einen Text ein: ")
Geben Sie einen Text ein: Python ist gut
>>> s
'Python ist gut'
19
>>> len("Hallo Welt")
10
>>> len([1,2,3,4,5])
5
14 siehe Abschnitt 12.4, »Ganzzahlen – int«
298
299
19
Funktionen
19.7.28 list([sequence])
Hiermit wird eine Instanz des Datentyps list15 aus den Elementen von sequence
erzeugt. Der Parameter sequence muss ein iterierbares Objekt sein. Wenn er weggelassen wird, wird eine leere Liste erzeugt.
>>> list()
[]
>>> list((1,2,3,4))
[1, 2, 3, 4]
>>> list({"a": 1, "b": 2})
['a', 'b']
Die Funktion list kann dazu verwendet werden, ein beliebiges iterierbares Objekt in
eine Liste zu überführen:
>>> list(range(0, 10, 2))
[0, 2, 4, 6, 8]
19.7.29 locals()
Die Built-in Function locals gibt ein Dictionary mit allen lokalen Referenzen des
aktuellen Namensraums zurück. Die Schlüssel entsprechen den Referenznamen als
Strings und die Werte den jeweiligen Instanzen. Dies soll an folgendem Beispiel deutlich werden:
def f(a, b, c):
d = a + b + c
print(locals())
f(1, 2, 3)
Das bei diesem Aufruf von locals zurückgegebene Dictionary enthält die Referenzen
a, b, c und d, die im lokalen Namensraum der Funktion existieren.
19.7
Eingebaute Funktionen
den, die aber die gleiche Länge wie das erste haben müssen. Die Funktion function
muss genauso viele Parameter erwarten, wie iterierbare Objekte übergeben wurden,
und aus den Parametern einen Rückgabewert erzeugen.
Die Funktion map ruft function für jedes Element von iterable auf und gibt ein iterierbares Objekt zurück, das die jeweiligen Rückgabewerte von function durchläuft. Sollten mehrere iterierbare Objekte übergeben werden, werden function die jeweils nten Elemente dieser Objekte übergeben.
Im folgenden Beispiel wird das Funktionsobjekt durch eine Lambda-Form erstellt. Es
ist auch möglich, eine »echte« Funktion zu definieren und ihren Namen zu übergeben.
>>>
>>>
>>>
[1,
f = lambda x: x**2
ergebnis = map(f, [1,2,3,4])
list(ergebnis)
4, 9, 16]
Hier wird map dazu verwendet, eine Liste mit den Quadraten der Elemente einer zweiten Liste zu erzeugen.
>>>
>>>
>>>
[2,
f = lambda x, y: x+y
ergebnis = map(f, [1,2,3,4], [1,2,3,4])
list(ergebnis)
4, 6, 8]
Hier wird map dazu verwendet, aus zwei Listen eine zu erzeugen, die die Summen der
jeweiligen Elemente beider Quelllisten enthält.
Das letzte Beispiel wird durch Abbildung 19.3 veranschaulicht. Die eingehenden und
ausgehenden iterierbaren Objekte sind jeweils senkrecht dargestellt.
f
1
1
2
f
2
2
4
f
3
3
6
f
4
4
8
{'a': 1, 'c': 3, 'b': 2, 'd': 6}
Der Aufruf von locals im Namensraum des Hauptprogramms ist äquivalent zum
Aufruf von globals.
19.7.30 map(function, [*iterable])
Diese Funktion erwartet ein Funktionsobjekt als ersten und ein iterierbares Objekt
als zweiten Parameter. Optional können weitere iterierbare Objekte übergeben wer-
Abbildung 19.3 Arbeitsweise der Built-in Function map
15 siehe Abschnitt 13.2, »Listen – list«
300
301
19
19
Funktionen
In beiden Beispielen wurden Listen verwendet, die ausschließlich numerische Elemente enthielten. Das muss nicht unbedingt sein. Welche Elemente ein an map übergebenes iterierbares Objekt durchlaufen darf, hängt davon ab, welche Instanzen für
function als Parameter verwendet werden dürfen.
19.7.31 max(iterable, {default, key})
max(arg1, arg2, [*args], {key})
Wenn keine zusätzlichen Parameter übergeben werden, erwartet max ein iterierbares
Objekt und gibt ihr größtes Element zurück.
>>> max([2,4,1,9,5])
9
>>> max("Hallo Welt")
't'
Wenn mehrere Parameter übergeben werden, verhält sich max so, dass der größte
übergebene Parameter zurückgegeben wird:
>>> max(3, 5, 1, 99, 123, 45)
123
>>> max("Hallo", "Welt", "!")
'Welt'
Der Funktion max kann optional über den Schlüsselwortparameter key ein Funktionsobjekt übergeben werden. Das Maximum wird dann durch das Vergleichen der Rückgabewerte dieser Funktion bestimmt. Mit dem Parameter key lässt sich also eine
eigene Ordnungsrelation festlegen. In folgendem Beispiel soll key dazu verwendet
werden, die Funktion max für Strings case insensitive zu machen. Dazu zeigen wir
zunächst den normalen Aufruf ohne key:
>>> max("a", "P", "q", "X")
'q'
Ohne eigene key-Funktion wird der größte Parameter unter Berücksichtigung von
Groß- und Kleinbuchstaben ermittelt. Folgende key-Funktion konvertiert zuvor alle
Buchstaben in Kleinbuchstaben:
>>> f = lambda x: x.lower()
>>> max("a", "P", "q", "X", key=f)
'X'
Durch die key-Funktion wird der größte Parameter anhand der durch f modifizierten
Werte ermittelt, jedoch unmodifiziert zurückgegeben.
302
19.7
Eingebaute Funktionen
Über den letzten Schlüsselwortparameter default kann ein Wert festgelegt werden,
der von max zurückgegeben wird, wenn iterable leer sein sollte.
19.7.32 min(iterable, {default, key})
min(arg1, arg2, [*args], {key})
Die Funktion min verhält sich wie max, ermittelt jedoch das kleinste Element einer
Sequenz bzw. den kleinsten übergebenen Parameter.
19.7.33 oct(x)
Die Funktion oct erzeugt einen String, der die übergebene ganze Zahl x in Oktalschreibweise enthält.
>>> oct(123)
'0o173'
>>> oct(0o777)
'0o777'
19.7.34 ord(c)
Die Funktion ord erwartet einen String der Länge 1 und gibt den Unicode-Codepoint
des enthaltenen Zeichens zurück.
>>> ord("P")
80
>>> ord("€")
8364
19
Näheres zu Unicode und Codepoints erfahren Sie in Abschnitt 13.4.4, »Zeichensätze
und Sonderzeichen«.
19.7.35 pow(x, y, [z])
Berechnet x ** y oder, wenn z angegeben wurde, x ** y % z. Diese Berechnung ist unter Verwendung des Parameters z performanter als die Ausdrücke pow(x, y) % z bzw.
x ** y % z.
>>> 7 ** 5 % 4
3
>>> pow(7, 5, 4)
3
303
19
Funktionen
19.7.36 print([*objects], {sep, end, file, flush])
Die Funktion print schreibt die Textentsprechungen der für objects übergebenen
Instanzen in den Datenstrom file. Bislang haben wir print nur dazu verwendet, auf
den Bildschirm bzw. in die Standardausgabe zu schreiben. Hier sehen wir, dass print
es über den Schlüsselwortparameter file ermöglicht, in ein beliebiges zum Schreiben geöffnetes Dateiobjekt zu schreiben:
>>> f = open("datei.txt", "w")
>>> print("Hallo Welt", file=f)
>>> f.close()
Über den Schlüsselwortparameter sep, der mit einem Leerzeichen vorbelegt ist, wird
das Trennzeichen angegeben, das zwischen zwei auszugebenden Werten stehen soll:
>>> print("Hallo", "Welt")
Hallo Welt
>>> print("Hallo", "du", "schöne", "Welt", sep="-")
Hallo-du-schöne-Welt
Über den zweiten Schlüsselwortparameter end wird bestimmt, welches Zeichen print
als Letztes, also nach erfolgter Ausgabe aller übergebenen Instanzen, ausgeben soll.
Vorbelegt ist dieser Parameter mit einem Newline-Zeichen.
>>> print("Hallo", end=" Welt\n")
Hallo Welt
>>> print("Hallo", "Welt", end="AAAA")
Hallo WeltAAAA>>>
Im letzten Beispiel befindet sich der Eingabeprompt des Interpreters direkt hinter
der von print erzeugten Ausgabe, weil im Gegensatz zum Standardverhalten von
print am Ende kein Newline-Zeichen ausgegeben wurde.
Mithilfe des letzten Parameters flush können Sie ein Leeren des Datenstrompuffers
nach der Ausgabe erzwingen.
19.7.37 range([start], stop, [step])
Die Funktion range erzeugt ein iterierbares Objekt über fortlaufende, numerische
Werte. Dabei wird mit start begonnen, vor stop aufgehört und in jedem Schritt der
vorherige Wert um step erhöht. Sowohl start als auch step sind optional und mit 0
bzw. 1 vorbelegt.
Beachten Sie, dass stop eine Grenze angibt, die nicht erreicht wird. Die Nummerierung beginnt also bei 0 und endet einen Schritt, bevor stop erreicht würde.
304
19.7
Eingebaute Funktionen
Bei dem von range zurückgegebenen iterierbaren Objekt handelt es sich um ein sogenanntes range-Objekt. Dies wird bei der Ausgabe im interaktiven Modus folgendermaßen angezeigt:
>>> range(10)
range(0, 10)
Um zu veranschaulichen, über welche Zahlen das range-Objekt iteriert, wurde es in
den folgenden Beispielen mit list in eine Liste überführt:
>>>
[0,
>>>
[5,
>>>
[2,
list(range(10))
1, 2, 3, 4, 5, 6, 7, 8, 9]
list(range(5, 10))
6, 7, 8, 9]
list(range(2, 10, 2))
4, 6, 8]
Es ist möglich, eine negative Schrittweite anzugeben:
>>> list(range(10, 0, -1))
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> list(range(10, 0, -2))
[10, 8, 6, 4, 2]
Hinweis
In Python-Versionen vor 3.0 existierten die eingebauten Funktionen range und
xrange. Die alte range-Funktion gibt das Ergebnis in Form einer Liste zurück, während
die xrange-Funktion so funktioniert wie die range-Funktion in aktuellen Python-Versionen.
19.7.38 repr(object)
Die Funktion repr gibt einen String zurück, der eine druckbare Repräsentation der
Instanz object enthält. Für viele Instanzen versucht repr, den Python-Code in den
String zu schreiben, der die entsprechende Instanz erzeugen würde. Für manche
Instanzen ist dies jedoch nicht möglich bzw. nicht praktikabel. In einem solchen Fall
gibt repr zumindest den Typ der Instanz aus.
>>> repr([1,2,3,4])
'[1, 2, 3, 4]'
>>> repr(0x34)
'52'
>>> repr(set([1,2,3,4]))
305
19
19
Funktionen
19.7
Eingebaute Funktionen
'set([1, 2, 3, 4])'
>>> repr(open("datei.txt", "w"))
"<open file 'datei.txt', mode 'w' at 0xb7bea0f8>"
set({'a', ' ', 'e', 'H', 'l', 'o', 't', 'W'})
>>> set({1,2,3,4})
set({1, 2, 3, 4})
19.7.39 reversed(sequence)
19.7.42 sorted(iterable, [key, reverse])
Mit reversed kann eine Instanz sequence eines sequenziellen Datentyps effizient
rückwärts durchlaufen werden.
Die Funktion sorted erzeugt aus den Elementen von iterable eine sortierte Liste:
>>> for i in reversed([1, 2, 3, 4, 5, 6]):
...
print(i)
6
5
4
3
2
1
19.7.40 round(x, [n])
Die Funktion round rundet die Gleitkommazahl x auf n Nachkommastellen. Der Parameter n ist optional und mit 0 vorbelegt.
>>> round(-0.5)
-1.0
>>> round(0.5234234234234, 5)
0.52342
>>> round(0.5, 4)
0.5
19.7.41 set([iterable])
Hiermit wird eine Instanz des Datentyps set16 erzeugt. Wenn angegeben, werden alle
Elemente des iterierbaren Objekts iterable in das Set übernommen. Beachten Sie,
dass ein Set keine Dubletten enthalten darf, jedes in iterable mehrfach vorkommende Element also nur einmal eingetragen wird.
>>> set()
set()
>>> set("Hallo Welt")
16 siehe Abschnitt 15.1, »Die Datentypen set und frozenset«
306
>>> sorted([3,1,6,2,9,1,8])
[1, 1, 2, 3, 6, 8, 9]
>>> sorted("Hallo Welt")
[' ', 'H', 'W', 'a', 'e', 'l', 'l', 'l', 'o', 't']
Die Funktionsweise von sorted ist identisch mit der Methode sort der sequenziellen
Datentypen, die in Abschnitt 13.2.4, »Methoden von list-Instanzen«, erklärt wird.
19.7.43 str([object, encoding, errors])
Hiermit wird ein String erzeugt,17 der eine lesbare Beschreibung der Instanz object
enthält. Wenn object nicht übergeben wird, erzeugt str einen leeren String.
>>> str(None)
'None'
>>> str()
''
>>> str(12345)
'12345'
>>> str(str)
"<class 'str'>"
19
Die Funktion str kann dazu verwendet werden, einen bytes-String oder eine bytearray-Instanz in einen String zu überführen. Dieser Prozess wird Decodieren genannt,
und es muss dazu mindestens der Parameter encoding angegeben worden sein:
>>> b = bytearray([1,2,3])
>>> str(b, "utf-8")
'\x01\x02\x03'
>>> b = bytes("Hallö Wölt", "utf-8", "strict")
>>> str(b)
"b'Hall\\xc3\\xb6 W\\xc3\\xb6lt'"
>>> str(b, "utf-8")
'Hallö Wölt'
17 siehe Abschnitt 13.4.4, »Zeichensätze und Sonderzeichen«
307
19
Funktionen
19.7
Dabei muss für den Parameter encoding ein String übergeben werden, der das Encoding enthält, mit dem der bytes-String codiert wurde, in diesem Fall utf-8. Der Parameter errors wurde im Beispiel oben nicht angegeben und bestimmt, wie mit
Decodierungsfehlern zu verfahren ist. Die folgende Tabelle listet die möglichen Werte
für errors und ihre Bedeutung auf:
errors
Beschreibung
"strict"
Bei einem Decodierungsfehler wird eine ValueError-Exception geworfen.
"ignore"
Fehler bei der Decodierung werden ignoriert.
"replace"
Ein Zeichen, das nicht decodiert werden konnte, wird durch das Unicode-Zeichen U+FFFD (�), auch Replacement Character genannt,
ersetzt.
Tabelle 19.2 Mögliche Werte des Parameters errors
Hinweis
Beachten Sie, dass der Datentyp str mit Python 3.0 einer Überarbeitung unterzogen
wurde. Im Gegensatz zum Datentyp str aus Python 2.x ist er in Python 3 dazu
gedacht, Unicode-Text aufzunehmen. Er ist also vergleichbar mit dem Datentyp unicode aus Python 2. Der dortige Datentyp str lässt sich vergleichen mit dem bytesString aus Python 3.
Weitere Informationen über die Datentypen str und bytes sowie über Unicode finden Sie in Abschnitt 13.4.4, »Zeichensätze und Sonderzeichen«.
19.7.44 sum(iterable, [start])
Die Funktion sum berechnet die Summe aller Elemente des iterierbaren Objekts iterable und gibt das Ergebnis zurück. Wenn der optionale Parameter start angegeben
wurde, fließt dieser als Startwert der Berechnung ebenfalls in die Summe mit ein.
>>> sum([1,2,3,4])
10
>>> sum({1,2,3,4}, 2)
12
>>> sum({4,3,2,1}, 2)
12
Eingebaute Funktionen
19.7.45 tuple([iterable])
Hiermit wird eine Instanz des Datentyps tuple18 aus den Elementen von iterable
erzeugt.
>>> tuple()
()
>>> tuple([1,2,3,4])
(1, 2, 3, 4)
19.7.46 type(object)
Die Funktion type gibt den Datentyp der übergebenen Instanz object zurück.
>>> type(1)
<type 'int'>
>>> type("Hallo Welt") == str
True
>>> type(sum)
<class 'builtin_function_or_method'>
19.7.47 zip([*iterables])
Die Funktion zip nimmt beliebig viele, gleich lange iterierbare Objekte als Parameter.
Sollten nicht alle die gleiche Länge haben, werden die längeren nur bis zur Länge des
kürzesten dieser Objekte betrachtet.
Als Rückgabewert wird ein iterierbares Objekt erzeugt, das über Tupel iteriert, die im
i-ten Iterationsschritt die jeweils i-ten Elemente der übergebenen Sequenzen enthalten.
>>> ergebnis = zip([1,2,3,4], [5,6,7,8], [9,10,11,12])
>>> list(ergebnis)
[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]
>>> ergebnis = zip("Hallo Welt", "HaWe")
>>> list(ergebnis)
[('H', 'H'), ('a', 'a'), ('l', 'W'), ('l', 'e')]
Bei der bereits besprochenen Funktion enumerate handelt es sich um einen Spezialfall
der zip-Funktion:
>>> s = "Python"
>>> list(zip(range(len(s)), s))
[(0, 'P'), (1, 'y'), (2, 't'), (3, 'h'), (4, 'o'), (5, 'n')]
18 siehe Abschnitt 13.3, »Unveränderliche Listen – tuple«
308
309
19
19
Funktionen
Damit haben wir den ersten Teil der eingebauten Funktionen besprochen. In Kapitel
21, in dem die Konzepte der objektorientierten Programmierung besprochen werden, folgt in Abschnitt 21.5, »Built-in Functions für Objektorientierung«, die Beschreibung der eingebauten Funktionen mit objektorientiertem Hintergrund.
310
Auf einen Blick
Auf einen Blick
TEIL I Einstieg in Python ...........................................................................................
37
TEIL II Datentypen ...................................................................................................... 113
TEIL III Fortgeschrittene Programmiertechniken ............................................. 259
TEIL IV Die Standardbibliothek .............................................................................. 449
TEIL V Weiterführende Themen ............................................................................ 727
Inhalt
Inhalt
1
2
2.1
2.2
Einleitung
Die Programmiersprache Python
31
Historie, Konzepte, Einsatzgebiete .............................................................................
31
2.1.1
2.1.2
2.1.3
2.1.4
Geschichte und Entstehung .............................................................................
Grundlegende Konzepte ....................................................................................
Einsatzmöglichkeiten und Stärken ................................................................
Einsatzbeispiele ....................................................................................................
31
32
33
34
Die Verwendung von Python .........................................................................................
34
2.2.1
2.2.2
2.2.3
36
36
36
TEIL I
3
25
Windows .................................................................................................................
Linux .........................................................................................................................
OS X ...........................................................................................................................
Einstieg in Python
Erste Schritte im interaktiven Modus
39
3.1
Ganze Zahlen ........................................................................................................................
40
3.2
Gleitkommazahlen .............................................................................................................
41
3.3
Zeichenketten .......................................................................................................................
42
3.4
Listen .........................................................................................................................................
42
3.5
Dictionarys .............................................................................................................................
43
3.6
Variablen .................................................................................................................................
44
3.7
Logische Ausdrücke ............................................................................................................
46
3.8
Funktionen und Methoden .............................................................................................
47
3.8.1
3.8.2
Funktionen .............................................................................................................
Methoden ...............................................................................................................
48
48
Bildschirmausgaben ..........................................................................................................
49
3.9
5
Inhalt
Inhalt
4
4.1
Der Weg zum ersten Programm
53
7
Das Laufzeitmodell
Tippen, kompilieren, testen ...........................................................................................
53
7.1
Die Struktur von Instanzen .............................................................................................
93
4.1.1
4.1.2
55
55
7.1.1
7.1.2
7.1.3
Datentyp .................................................................................................................
Wert ..........................................................................................................................
Identität ..................................................................................................................
93
94
95
Referenzen und Instanzen freigeben .........................................................................
97
Shebang ...................................................................................................................
Interne Abläufe .....................................................................................................
Grundstruktur eines Python-Programms .................................................................
57
4.2.1
4.2.2
Umbrechen langer Zeilen ..................................................................................
Zusammenfügen mehrerer Zeilen .................................................................
59
59
4.3
Das erste Programm ..........................................................................................................
60
4.4
Kommentare .........................................................................................................................
63
4.5
Der Fehlerfall .........................................................................................................................
63
4.2
7.2
7.3
Mutable vs. immutable Datentypen ..........................................................................
7.3.1
Mutable Datentypen und Seiteneffekte ......................................................
91
98
100
8
Funktionen, Methoden und Attribute
103
8.1
Parameter von Funktionen und Methoden .............................................................
103
8.1.1
8.1.2
8.1.3
8.1.4
Positionsbezogene Parameter .........................................................................
Schlüsselwortparameter ...................................................................................
Optionale Parameter ..........................................................................................
Reine Schlüsselwortparameter .......................................................................
104
105
105
106
8.2
Attribute ..................................................................................................................................
106
9
Informationsquellen zu Python
109
9.1
Die Built-in Function help ................................................................................................
109
5
Kontrollstrukturen
65
5.1
Fallunterscheidungen .......................................................................................................
65
5.1.1
5.1.2
Die if-Anweisung ..................................................................................................
Bedingte Ausdrücke ............................................................................................
65
69
Schleifen ..................................................................................................................................
70
5.2.1
5.2.2
5.2.3
5.2.4
5.2.5
5.2.6
Die while-Schleife ................................................................................................
Abbruch einer Schleife .......................................................................................
Erkennen eines Schleifenabbruchs ................................................................
Abbruch eines Schleifendurchlaufs ...............................................................
Die for-Schleife .....................................................................................................
Die for-Schleife als Zählschleife ......................................................................
70
71
72
73
75
77
9.2
Die Onlinedokumentation ..............................................................................................
110
5.3
Die pass-Anweisung ..........................................................................................................
78
9.3
PEPs ...........................................................................................................................................
110
6
Dateien
79
TEIL II
6.1
Datenströme .........................................................................................................................
79
6.2
Daten aus einer Datei auslesen ....................................................................................
80
6.3
Daten in eine Datei schreiben .......................................................................................
84
6.4
Das Dateiobjekt erzeugen ...............................................................................................
85
6.4.1
6.4.2
6.4.3
85
87
88
5.2
6
open(filename, [mode, buffering, encoding, errors, newline]) .............
Attribute und Methoden eines Dateiobjekts .............................................
Die Schreib-/Leseposition verändern ............................................................
Datentypen
10 Das Nichts – NoneType
115
11 Operatoren
117
7
Inhalt
Inhalt
12 Numerische Datentypens
121
12.1 Arithmetische Operatoren ..............................................................................................
121
12.2 Vergleichende Operatoren .............................................................................................
123
12.3 Konvertierung zwischen numerischen Datentypen ............................................
124
12.4 Ganzzahlen – int ..................................................................................................................
125
12.4.1
12.4.2
12.4.3
Zahlensysteme ......................................................................................................
Bit-Operationen ....................................................................................................
Methoden ...............................................................................................................
125
127
130
12.5 Gleitkommazahlen – float ..............................................................................................
130
12.6 Boolesche Werte – bool ...................................................................................................
133
12.6.1
12.6.2
12.6.3
Logische Operatoren ...........................................................................................
Wahrheitswerte nicht-boolescher Datentypen .........................................
Auswertung logischer Operatoren .................................................................
133
136
137
12.7 Komplexe Zahlen – complex ..........................................................................................
138
13 Sequenzielle Datentypen
13.1 Operationen auf Instanzen sequenzieller Datentypen ......................................
13.1.1
13.1.2
13.1.3
13.1.4
13.1.5
13.1.6
141
142
13.3.1
13.3.2
166
Tuple Packing/Unpacking und Sequence Unpacking ..............................
Immutabel heißt nicht zwingend unveränderlich! ..................................
166
168
13.4 Strings – str, bytes, bytearray ........................................................................................
168
13.4.1
13.4.2
13.4.3
13.4.4
Steuerzeichen ........................................................................................................
String-Methoden ..................................................................................................
Formatierung von Strings .................................................................................
Zeichensätze und Sonderzeichen ...................................................................
171
173
183
192
14 Zuordnungen
201
14.1 Dictionary – dict ...................................................................................................................
201
14.1.1
14.1.2
Operatoren .............................................................................................................
Methoden ...............................................................................................................
204
206
15 Mengen
213
15.1 Die Datentypen set und frozenset ..............................................................................
213
15.1.1
15.1.2
Operatoren .............................................................................................................
Methoden ...............................................................................................................
214
220
15.2 Veränderliche Mengen – set ..........................................................................................
221
15.3 Unveränderliche Mengen – frozenset .......................................................................
223
Ist ein Element vorhanden? – die Operatoren in und not in .................
Verkettung von Sequenzen – die Operatoren + und += .........................
Wiederholung von Sequenzen – die Operatoren * und *= .....................
Zugriff auf bestimmte Elemente einer Sequenz – der []-Operator .....
Länge einer Sequenz – die Built-in Function len .......................................
Das kleinste und das größte Element einer Sequenz –
min und max .........................................................................................................
Die Position eines Elements in der Sequenz – s.index(x, [i, j]) ..............
Anzahl der Vorkommen eines Elements der Sequenz – s.count(x) .....
152
152
153
16 Collections
225
16.1 Verkettete Dictionarys .....................................................................................................
225
13.2 Listen – list .............................................................................................................................
154
16.2 Zählen von Häufigkeiten .................................................................................................
226
16.3 Dictionarys mit Standardwerten .................................................................................
229
16.4 Doppelt verkettete Listen ...............................................................................................
230
16.5 Benannte Tupel ....................................................................................................................
232
16.6 Sortierte Dictionarys ..........................................................................................................
233
13.1.7
13.1.8
13.2.1
13.2.2
13.2.3
13.2.4
13.2.5
8
Verändern eines Wertes innerhalb der Liste – Zuweisung mit [] ........
Ersetzen von Teillisten und Einfügen neuer Elemente –
Zuweisung mit [] ..................................................................................................
Elemente und Teillisten löschen – del zusammen mit [] .......................
Methoden von list-Instanzen ...........................................................................
Weitere Eigenschaften von Listen ..................................................................
143
145
146
147
151
13.3 Unveränderliche Listen – tuple .....................................................................................
155
155
156
156
163
9
Inhalt
Inhalt
17 Datum und Zeit
17.1 Elementare Zeitfunktionen – time ..............................................................................
17.1.1
17.1.2
235
235
Attribute ..................................................................................................................
Funktionen .............................................................................................................
237
238
17.2 Objektorientierte Datumsverwaltung – datetime ..............................................
243
17.2.1
17.2.2
17.2.3
17.2.4
17.2.5
17.2.6
datetime.date ........................................................................................................
datetime.time .......................................................................................................
datetime.datetime ..............................................................................................
datetime.timedelta .............................................................................................
Operationen für datetime.datetime und datetime.date ........................
Bemerkung zum Umgang mit Zeitzonen ....................................................
18 Aufzählungstypen – Enum
TEIL III
244
245
246
248
251
253
255
Fortgeschrittene Programmiertechniken
19 Funktionen
261
19.1 Schreiben einer Funktion .................................................................................................
263
19.2 Funktionsparameter ..........................................................................................................
19.2.1
19.2.2
19.2.3
19.2.4
19.2.5
19.2.6
267
Optionale Parameter ..........................................................................................
Schlüsselwortparameter ...................................................................................
Beliebige Anzahl von Parametern ..................................................................
Reine Schlüsselwortparameter .......................................................................
Entpacken einer Parameterliste ......................................................................
Seiteneffekte .........................................................................................................
267
268
269
271
272
274
19.3 Namensräume ......................................................................................................................
277
19.3.1
19.3.2
19.3.3
19.3.4
Zugriff auf globale Variablen – global ..........................................................
Zugriff auf den globalen Namensraum ........................................................
Lokale Funktionen ................................................................................................
Zugriff auf übergeordnete Namensräume – nonlocal ............................
277
278
279
280
19.4 Anonyme Funktionen ........................................................................................................
281
19.5 Annotationen ........................................................................................................................
282
19.6 Rekursion ................................................................................................................................
284
10
19.7 Eingebaute Funktionen ....................................................................................................
285
19.7.1
19.7.2
19.7.3
19.7.4
19.7.5
19.7.6
19.7.7
19.7.8
19.7.9
19.7.10
19.7.11
19.7.12
19.7.13
19.7.14
19.7.15
19.7.16
19.7.17
19.7.18
19.7.19
19.7.20
19.7.21
19.7.22
19.7.23
abs(x) ........................................................................................................................
all(iterable) .............................................................................................................
any(iterable) ...........................................................................................................
ascii(object) ............................................................................................................
bin(x) ........................................................................................................................
bool([x]) ...................................................................................................................
bytearray([source, encoding, errors]) ............................................................
bytes([source, encoding, errors]) ....................................................................
chr(i) ..........................................................................................................................
complex([real, imag]) ..........................................................................................
dict([source]) ..........................................................................................................
divmod(a, b) ...........................................................................................................
enumerate(iterable) ............................................................................................
eval(expression, [globals, locals]) ...................................................................
exec(object, [globals, locals]) ...........................................................................
filter(function, iterable) .....................................................................................
float([x]) ..................................................................................................................
format(value, [format_spec]) ..........................................................................
frozenset([iterable]) ............................................................................................
globals() ...................................................................................................................
hash(object) ...........................................................................................................
help([object]) .........................................................................................................
hex(x) .......................................................................................................................
288
289
289
289
290
290
290
291
291
292
292
293
293
294
294
295
295
296
296
296
297
298
298
19.7.24
19.7.25
19.7.26
19.7.27
19.7.28
19.7.29
19.7.30
19.7.31
id(object) .................................................................................................................
input([prompt]) ....................................................................................................
int([x, base]) ...........................................................................................................
len(s) .........................................................................................................................
list([sequence]) .....................................................................................................
locals() ......................................................................................................................
map(function, [*iterable]) .................................................................................
max(iterable, {default, key})
max(arg1, arg2, [*args], {key}) ...........................................................................
298
298
299
299
300
300
300
19.7.32 min(iterable, {default, key})
min(arg1, arg2, [*args], {key}) ............................................................................
19.7.33 oct(x) .........................................................................................................................
19.7.34 ord(c) ........................................................................................................................
19.7.35 pow(x, y, [z]) ...........................................................................................................
19.7.36 print([*objects], {sep, end, file, flush]) ...........................................................
19.7.37 range([start], stop, [step]) .................................................................................
19.7.38 repr(object) .............................................................................................................
302
303
303
303
303
304
304
305
11
Inhalt
Inhalt
19.7.39
19.7.40
19.7.41
19.7.42
19.7.43
19.7.44
19.7.45
19.7.46
19.7.47
reversed(sequence) .............................................................................................
round(x, [n]) ...........................................................................................................
set([iterable]) .........................................................................................................
sorted(iterable, [key, reverse]) .........................................................................
str([object, encoding, errors]) ...........................................................................
sum(iterable, [start]) ...........................................................................................
tuple([iterable]) ....................................................................................................
type(object) ............................................................................................................
zip([*iterables]) .....................................................................................................
20 Modularisierung
306
306
306
307
307
308
309
309
309
311
20.1 Einbinden globaler Module ............................................................................................
311
20.2 Lokale Module ......................................................................................................................
314
20.2.1
20.2.2
20.2.3
21.3 Setter und Getter und Property Attributes .............................................................
21.3.1
21.3.2
352
Setter und Getter .................................................................................................
Property-Attribute ...............................................................................................
352
353
21.4 Klassenattribute und Klassenmethoden sowie statische Methoden ..........
355
21.4.1
21.4.2
21.4.3
Statische Methoden ............................................................................................
Klassenmethoden ................................................................................................
Klassenattribute ...................................................................................................
355
356
357
21.5 Built-in Functions für Objektorientierung ...............................................................
358
21.5.1
Funktionen für die Verwaltung der Attribute einer Instanz ..................
359
21.5.2
Funktionen für Informationen über die Klassenhierarchie ...................
360
21.6 Objektphilosophie ..............................................................................................................
361
21.7 Magic Methods und Magic Attributes .......................................................................
363
21.7.1
21.7.2
21.7.3
Allgemeine Magic Methods ..............................................................................
Operatoren überladen ........................................................................................
Datentypen emulieren .......................................................................................
364
370
378
Namenskonflikte ..................................................................................................
Modulinterne Referenzen .................................................................................
Module ausführen ...............................................................................................
315
316
316
20.3 Pakete .......................................................................................................................................
317
22 Ausnahmebehandlung
383
319
320
320
22.1 Exceptions ..............................................................................................................................
383
20.3.1
20.3.2
20.3.3
Importieren aller Module eines Pakets .........................................................
Namespace Packages .........................................................................................
Relative Import-Anweisungen .........................................................................
20.4 Das Paket importlib ...........................................................................................................
20.4.1
20.4.2
Einbinden von Modulen und Paketen ...........................................................
Verändern des Import-Verhaltens .................................................................
21 Objektorientierung
21.1 Klassen .....................................................................................................................................
21.1.1
21.1.2
321
322
322
332
333
334
21.2 Vererbung ...............................................................................................................................
337
12
Technische Grundlagen .....................................................................................
Die Klasse GirokontoMitTagesumsatz ..........................................................
Mögliche Erweiterungen der Klasse Konto .................................................
Ausblick ...................................................................................................................
Mehrfachvererbung ............................................................................................
Eingebaute Exceptions .......................................................................................
Werfen einer Exception .....................................................................................
Abfangen einer Exception .................................................................................
Eigene Exceptions ................................................................................................
Erneutes Werfen einer Exception ...................................................................
Exception Chaining .............................................................................................
384
385
386
390
392
395
22.2 Zusicherungen – assert .....................................................................................................
396
23 Iteratoren und Generatoren
399
23.1 Comprehensions ..................................................................................................................
399
327
Definieren von Methoden .................................................................................
Der Konstruktor und die Erzeugung von Attributen ................................
21.2.1
21.2.2
21.2.3
21.2.4
21.2.5
22.1.1
22.1.2
22.1.3
22.1.4
22.1.5
22.1.6
338
341
346
350
351
23.1.1
23.1.2
23.1.3
List Comprehensions ..........................................................................................
Dict Comprehensions .........................................................................................
Set Comprehensions ...........................................................................................
23.2 Generatoren ..........................................................................................................................
23.2.1
23.2.2
Subgeneratoren ....................................................................................................
Generator Expressions .......................................................................................
399
402
403
403
406
409
13
Inhalt
Inhalt
23.3 Iteratoren ................................................................................................................................
23.3.1
23.3.2
23.3.3
410
Verwendung von Iteratoren .............................................................................
Mehrere Iteratoren für dieselbe Instanz ......................................................
Nachteile von Iteratoren gegenüber dem direkten Zugriff
über Indizes ............................................................................................................
Alternative Definition für iterierbare Objekte ...........................................
Funktionsiteratoren ............................................................................................
419
419
420
23.4 Spezielle Generatoren – itertools ................................................................................
421
23.3.4
23.3.5
413
416
24 Kontextobjekte
431
24.1 Die with-Anweisung ..........................................................................................................
431
24.2 Hilfsfunktionen für with-Kontexte – contextlib ..................................................
434
24.2.1
24.2.2
24.2.3
Einfache Funktionen als Kontext-Manager ................................................
Bestimmte Exception-Typen unterdrücken ................................................
Den Standard-Ausgabestrom umleiten .......................................................
434
435
436
25 Manipulation von Funktionen und Methoden
437
25.1 Decorator ................................................................................................................................
437
25.2 Das Modul functools ..........................................................................................................
440
25.2.1
25.2.2
25.2.3
25.2.4
25.2.5
TEIL IV
Funktionsschnittstellen vereinfachen ..........................................................
Methodenschnittstellen vereinfachen .........................................................
Caches ......................................................................................................................
Ordnungsrelationen vervollständigen ..........................................................
Überladen von Funktionen ...............................................................................
Die Standardbibliothek
26 Mathematik
26.1 Mathematische Funktionen – math, cmath ...........................................................
26.1.1
26.1.2
26.1.3
14
440
442
443
444
445
Zahlentheoretische Funktionen ......................................................................
Exponential- und Logarithmusfunktionen ..................................................
Trigonometrische und hyperbolische Funktionen ....................................
451
451
452
454
454
26.1.4
26.1.5
Umrechnen von Winkeln ...................................................................................
Darstellungsformen komplexer Zahlen .......................................................
26.2 Zufallszahlengenerator – random ...............................................................................
455
455
456
26.2.1
26.2.2
Den Status speichern und laden .....................................................................
Zufällige ganze Zahlen erzeugen ....................................................................
457
457
26.2.3
26.2.4
26.2.5
Zufällige Gleitkommazahlen erzeugen ........................................................
Zufallsgesteuerte Operationen auf Sequenzen .........................................
SystemRandom([seed]) ......................................................................................
458
458
459
26.3 Präzise Dezimalzahlen – decimal .................................................................................
460
26.3.1
26.3.2
26.3.3
Verwendung des Datentyps .............................................................................
Nichtnumerische Werte ....................................................................................
Das Context-Objekt .............................................................................................
27 Kryptografie
27.1 Hash-Funktionen – hashlib .............................................................................................
27.1.1
27.1.2
27.1.3
27.1.4
461
464
465
467
467
Verwendung des Moduls ..................................................................................
Weitere Algorithmen ..........................................................................................
Vergleich großer Dateien ..................................................................................
Passwörter ..............................................................................................................
469
470
470
471
27.2 Verschlüsselung – PyCrypto ...........................................................................................
472
27.2.1
27.2.2
Symmetrische Verschlüsselungsverfahren .................................................
Asymmetrische Verschlüsselungsverfahren ..............................................
473
476
28 Reguläre Ausdrücke
481
28.1 Syntax regulärer Ausdrücke ...........................................................................................
481
28.1.1
28.1.2
28.1.3
28.1.4
28.1.5
28.1.6
28.1.7
28.1.8
28.1.9
Beliebige Zeichen .................................................................................................
Zeichenklassen ......................................................................................................
Quantoren ..............................................................................................................
Vordefinierte Zeichenklassen ..........................................................................
Weitere Sonderzeichen ......................................................................................
Genügsame Quantoren .....................................................................................
Gruppen ..................................................................................................................
Alternativen ...........................................................................................................
Extensions ..............................................................................................................
482
482
483
485
487
488
489
490
490
15
Inhalt
Inhalt
28.2 Verwendung des Moduls .................................................................................................
28.2.1
28.2.2
28.2.3
28.2.4
28.2.5
28.2.6
28.2.7
28.2.8
493
Searching ................................................................................................................
Matching .................................................................................................................
Einen String aufspalten .....................................................................................
Teile eines Strings ersetzen ..............................................................................
Problematische Zeichen ersetzen ...................................................................
Einen regulären Ausdruck kompilieren ........................................................
Flags ..........................................................................................................................
Das Match-Objekt ................................................................................................
493
494
494
495
496
496
496
498
28.3 Ein einfaches Beispielprogramm – Searching ........................................................
499
28.4 Ein komplexeres Beispielprogramm – Matching ..................................................
500
29 Schnittstelle zu Betriebssystem und
Laufzeitumgebung
505
29.1 Funktionen des Betriebssystems – os ........................................................................
505
29.1.1
29.1.2
29.1.3
29.1.4
29.1.5
environ .....................................................................................................................
getpid() ....................................................................................................................
cpu_count() ............................................................................................................
system(cmd) ..........................................................................................................
popen(command, [mode, buffering]) ...........................................................
29.2 Zugriff auf die Laufzeitumgebung – sys ...................................................................
31 Dateisystem
523
31.1 Zugriff auf das Dateisystem mit os .............................................................................
523
31.2 Dateipfade – os.path .........................................................................................................
530
31.3 Zugriff auf das Dateisystem – shutil ..........................................................................
535
31.3.1
31.3.2
Verzeichnis- und Dateioperationen ...............................................................
Archivoperationen ...............................................................................................
537
538
31.4 Temporäre Dateien – tempfile ......................................................................................
541
32 Parallele Programmierung
543
32.1 Prozesse, Multitasking und Threads ..........................................................................
543
32.1.1
32.1.2
Die Leichtgewichte unter den Prozessen – Threads .................................
Threads oder Prozesse? ......................................................................................
544
546
32.2 Pythons Schnittstellen zur Parallelisierung ............................................................
546
506
506
506
507
507
32.3 Parallelisierung von Funktionsaufrufen ...................................................................
547
Ein Beispiel mit einem futures.ThreadPoolExecutor ................................
Executor-Instanzen als Kontext-Manager ...................................................
Die Verwendung von futures.ProcessPoolExecutor .................................
Die Verwaltung der Aufgaben eines Executors .........................................
548
550
550
551
32.3.1
32.3.2
32.3.3
32.3.4
508
32.4 Die Module threading und multiprocessing ...........................................................
558
508
508
509
509
510
511
512
32.5 Die Thread-Unterstützung in Python .........................................................................
558
30 Kommandozeilenparameter
29.2.1
29.2.2
29.2.3
29.2.4
29.2.5
29.2.6
29.2.7
Kommandozeilenparameter ............................................................................
Standardpfade ......................................................................................................
Standard-Ein-/Ausgabeströme .......................................................................
Das Programm beenden ....................................................................................
Details zur Python-Version ...............................................................................
Details zum Betriebssystem .............................................................................
Hooks .......................................................................................................................
32.5.1
32.5.2
32.5.3
Kritische Bereiche mit Lock-Objekten absichern .......................................
Datenaustausch zwischen Threads mit Critical Sections ......................
Gefahren von Critical Sections – Deadlocks ...............................................
560
562
567
32.6 Einblick in das Modul multiprocessing ......................................................................
568
32.7 Ausblick ...................................................................................................................................
569
515
33 Datenspeicherung
571
30.1 Taschenrechner – ein einfaches Beispiel ..................................................................
516
33.1 Komprimierte Dateien lesen und schreiben – gzip ..............................................
571
30.2 Ein weiteres Beispiel ..........................................................................................................
520
33.2 XML ............................................................................................................................................
573
33.2.1
33.2.2
16
ElementTree ...........................................................................................................
SAX – Simple API for XML ..................................................................................
575
583
17
Inhalt
Inhalt
33.3 Datenbanken ........................................................................................................................
33.3.1
587
Pythons eingebaute Datenbank – sqlite3 ....................................................
590
33.4 Serialisierung von Instanzen – pickle .........................................................................
607
33.4.1
33.4.2
Funktionale Schnittstelle ..................................................................................
Objektorientierte Schnittstelle ........................................................................
608
609
33.5 Das Datenaustauschformat JSON – json ..................................................................
610
33.6 Das Tabellenformat CSV – csv .......................................................................................
33.6.1
33.6.2
reader-Objekte – Daten aus einer CSV-Datei lesen ..................................
Dialect-Objekte – eigene Dialekte verwenden ..........................................
612
613
615
34 Netzwerkkommunikation
619
34.1 Socket API ...............................................................................................................................
620
34.1.1
34.1.2
34.1.3
34.1.4
34.1.5
34.1.6
34.1.7
34.1.8
34.1.9
Client-Server-Systeme ........................................................................................
UDP ...........................................................................................................................
TCP ............................................................................................................................
Blockierende und nicht-blockierende Sockets ...........................................
Erzeugen eines Sockets ......................................................................................
Die Socket-Klasse .................................................................................................
Netzwerk-Byte-Order ..........................................................................................
Multiplexende Server – selectors ...................................................................
Objektorientierte Serverentwicklung – socketserver ..............................
621
624
626
628
629
631
634
635
637
34.2 URLs – urllib ...........................................................................................................................
639
34.2.1
34.2.2
Zugriff auf entfernte Ressourcen – urllib.request ....................................
Einlesen und Verarbeiten von URLs – urllib.parse ....................................
640
644
34.3 FTP – ftplib .............................................................................................................................
648
34.3.1
34.3.2
34.3.3
34.3.4
Mit einem FTP-Server verbinden .....................................................................
FTP-Kommandos ausführen .............................................................................
Mit Dateien und Verzeichnissen arbeiten ...................................................
Übertragen von Dateien ....................................................................................
649
650
650
652
34.4 E-Mail ........................................................................................................................................
654
34.4.1
34.4.2
34.4.3
34.4.4
18
SMTP – smtplib .....................................................................................................
POP3 – poplib ........................................................................................................
IMAP4 – imaplib ...................................................................................................
Erstellen komplexer E-Mails – email .............................................................
655
658
662
668
34.5 Telnet – telnetlib .................................................................................................................
34.5.1
34.5.2
673
Die Klasse Telnet ..................................................................................................
Beispiel .....................................................................................................................
673
674
34.6 XML-RPC ..................................................................................................................................
676
34.6.1
34.6.2
34.6.3
34.6.4
Der Server ...............................................................................................................
Der Client ................................................................................................................
Multicall ..................................................................................................................
Einschränkungen .................................................................................................
677
680
682
683
35 Debugging und Qualitätssicherung
687
35.1 Der Debugger ........................................................................................................................
687
35.2 Formatierte Bildschirmausgabe – pprint .................................................................
690
35.3 Logdateien – logging .........................................................................................................
691
35.3.1
35.3.2
Das Meldungsformat anpassen ......................................................................
Logging Handler ...................................................................................................
694
696
35.4 Automatisiertes Testen ....................................................................................................
698
35.4.1
35.4.2
Testfälle in Docstrings – doctest .....................................................................
Unit Tests – unittest ...........................................................................................
35.5 Analyse des Laufzeitverhaltens ....................................................................................
35.5.1
35.5.2
35.5.3
698
703
706
Laufzeitmessung – timeit .................................................................................
Profiling – cProfile ................................................................................................
Tracing – trace .......................................................................................................
707
710
713
35.6 Optimierung ..........................................................................................................................
716
35.6.1
35.6.2
35.6.3
35.6.4
35.6.5
35.6.6
35.6.7
35.6.8
35.6.9
Die Optimize-Option ...........................................................................................
Mutabel vs. immutabel ......................................................................................
Schleifen ..................................................................................................................
Funktionsaufrufe .................................................................................................
C .................................................................................................................................
Lookup ......................................................................................................................
Exceptions ..............................................................................................................
Keyword Arguments ...........................................................................................
Alternative Interpreter: PyPy ............................................................................
717
717
718
719
719
720
720
721
721
19
Inhalt
Inhalt
36 Dokumentation
723
36.1 Docstrings ...............................................................................................................................
723
36.2 Automatisches Erstellen einer Dokumentation – pydoc ...................................
725
TEIL V
Weiterführende Themen
37 Anbindung an andere Programmiersprachen
37.1 Dynamisch ladbare Bibliotheken – ctypes ..............................................................
37.1.1
37.1.2
37.1.3
37.1.4
37.1.5
37.1.6
Ein einfaches Beispiel .........................................................................................
Die eigene Bibliothek ..........................................................................................
Datentypen ............................................................................................................
Schnittstellenbeschreibung .............................................................................
Pointer .....................................................................................................................
Strings ......................................................................................................................
37.2 Schreiben von Extensions ................................................................................................
37.2.1
37.2.2
37.2.3
37.2.4
729
739
37.3 Python als eingebettete Skriptsprache .....................................................................
748
37.4 Alternative Interpreter .....................................................................................................
37.4.1
37.4.2
Interoperabilität mit der Java Runtime Environment – Jython ............
Interoperabilität mit .NET – IronPython .......................................................
38 Distribution von Python-Projekten
38.1 Eine Geschichte der Distributionen in Python .......................................................
38.1.1
38.1.2
38.1.3
748
750
753
754
759
765
765
Der klassische Ansatz – distutils .....................................................................
Der neue Standard – setuptools .....................................................................
Der Paketindex – PyPI und pip .........................................................................
766
766
767
38.2 Erstellen von Distributionen – setuptools ...............................................................
767
38.2.1
20
Schreiben des Moduls ........................................................................................
769
774
774
776
776
777
38.3 Der Python-Paketmanager – pip ..................................................................................
778
38.4.1
38.4.2
Beispiel für die Verwendung von gettext ....................................................
Erstellen des Sprachkompilats .........................................................................
779
780
781
730
730
731
733
735
737
738
739
744
745
747
Ein einfaches Beispiel .........................................................................................
Ein komplexeres Beispiel ...................................................................................
Das Installationsskript ........................................................................................
Erstellen einer Quellcodedistribution ...........................................................
Erstellen einer Binärdistribution .....................................................................
Distributionen installieren ................................................................................
Eigenständige Distributionen erstellen ........................................................
Erstellen von EXE-Dateien – cx_Freeze .........................................................
38.4 Lokalisierung von Programmen – gettext ...............................................................
Ein einfaches Beispiel .........................................................................................
Exceptions ..............................................................................................................
Erzeugen der Extension .....................................................................................
Reference Counting .............................................................................................
37.3.1
37.3.2
38.2.2
38.2.3
38.2.4
38.2.5
38.2.6
38.2.7
768
39 Grafische Benutzeroberflächen
785
39.1 Toolkits ....................................................................................................................................
785
39.2 Einführung in tkinter .........................................................................................................
788
39.2.1
39.2.2
39.2.3
39.2.4
39.2.5
39.2.6
39.2.7
Ein einfaches Beispiel .........................................................................................
Steuerelementvariablen ....................................................................................
Der Packer ...............................................................................................................
Events .......................................................................................................................
Steuerelemente ....................................................................................................
Zeichnungen – das Canvas-Widget ...............................................................
Weitere Module ....................................................................................................
788
790
792
796
803
823
830
39.3 Einführung in PyQt .............................................................................................................
834
39.3.1
39.3.2
39.3.3
Installation .............................................................................................................
Grundlegende Konzepte von Qt .....................................................................
Entwicklungsprozess ..........................................................................................
834
835
837
39.4 Signale und Slots .................................................................................................................
844
39.5 Wichtige Widgets ................................................................................................................
847
39.5.1
39.5.2
39.5.3
39.5.4
39.5.5
39.5.6
39.5.7
39.5.8
39.5.9
39.5.10
QCheckBox .............................................................................................................
QComboBox ...........................................................................................................
QDateEdit, QTimeEdit, QDateTimeEdit ........................................................
QDialog ....................................................................................................................
QLineEdit .................................................................................................................
QListWidget, QListView .....................................................................................
QProgressBar .........................................................................................................
QPushButton .........................................................................................................
QRadioButton ........................................................................................................
QSlider, QDial ........................................................................................................
847
848
849
849
850
850
851
852
852
852
21
Inhalt
Inhalt
39.5.11 QTextEdit ................................................................................................................
39.5.12 QWidget ..................................................................................................................
853
854
41 Wissenschaftliches Rechnen
933
39.6 Zeichenfunktionalität .......................................................................................................
855
41.1 Installation .............................................................................................................................
934
39.6.1
39.6.2
Werkzeuge ..............................................................................................................
Koordinatensystem .............................................................................................
855
857
41.2 Das Modellprogramm .......................................................................................................
934
39.6.3
39.6.4
39.6.5
39.6.6
Einfache Formen ..................................................................................................
Grafiken ...................................................................................................................
Text ...........................................................................................................................
Eye Candy ................................................................................................................
858
860
861
863
39.7 Model-View-Architektur ..................................................................................................
39.7.1
39.7.2
39.7.3
Beispielprojekt: ein Adressbuch ......................................................................
Auswählen von Einträgen .................................................................................
Bearbeiten von Einträgen ..................................................................................
867
868
877
879
41.2.1
41.2.2
41.2.3
Der Import von numpy, scipy und matplotlib ............................................
Vektorisierung und der Datentyp numpy.ndarray ...................................
Visualisieren von Daten mit matplotlib.pyplot .........................................
41.3 Überblick über die Module numpy und scipy .........................................................
41.3.1
41.3.2
Überblick über den Datentyp numpy.ndarray ...........................................
Überblick über scipy ............................................................................................
936
936
940
943
943
951
42 Insiderwissen
955
42.1 URLs im Standardbrowser öffnen – webbrowser .................................................
955
42.2 Interpretieren von Binärdaten – struct .....................................................................
955
42.3 Versteckte Passworteingabe .........................................................................................
958
40 Python als serverseitige Programmiersprache
im WWW – ein Einstieg in Django
883
40.1 Konzepte und Besonderheiten von Django ............................................................
884
42.4 Kommandozeilen-Interpreter .......................................................................................
959
40.2 Installation von Django ....................................................................................................
885
42.5 Dateiinterface für Strings – io.StringIO ....................................................................
961
Installation unter Linux und OS X ..................................................................
Installation unter Windows .............................................................................
886
887
42.6 Generatoren als Konsumenten .....................................................................................
962
40.3 Erstellen eines neuen Django-Projekts .....................................................................
888
40.2.1
40.2.2
40.3.1
40.3.2
42.6.1
42.6.2
42.6.3
Ein Decorator für konsumierende Generatorfunktionen .......................
Auslösen von Exceptions in einem Generator ...........................................
Eine Pipeline als Verkettung konsumierender Generatorfunktionen ..............................................................................................................
964
965
Der Entwicklungswebserver .............................................................................
Konfiguration des Projekts ...............................................................................
889
890
40.4 Erstellung einer Applikation ..........................................................................................
892
42.7 Kopieren von Instanzen – copy .....................................................................................
967
894
894
895
896
897
903
910
923
926
42.8 Die interaktive Python-Shell – IPython .....................................................................
971
40.4.1
40.4.2
40.4.3
40.4.4
40.4.5
40.4.6
40.4.7
40.4.8
40.4.9
22
Die Applikation in das Projekt einbinden .....................................................
Ein Model definieren ...........................................................................................
Beziehungen zwischen Modellen ...................................................................
Übertragung des Modells in die Datenbank ...............................................
Das Model-API .......................................................................................................
Unser Projekt bekommt ein Gesicht ..............................................................
Djangos Template-System ................................................................................
Verarbeitung von Formulardaten ...................................................................
Djangos Administrationsoberfläche .............................................................
966
42.8.1
Die interaktive Shell ............................................................................................
971
42.8.2
Das IPython-Notebook .......................................................................................
974
42.9 Bildverarbeitung – Pillow ................................................................................................
977
42.9.1
42.9.2
42.9.3
42.9.4
42.9.5
42.9.6
42.9.7
42.9.8
Bilddateien laden und speichern ....................................................................
Zugriff auf einzelne Pixel ...................................................................................
Teilbereiche eines Bildes ausschneiden .......................................................
Bilder zusammenfügen ......................................................................................
Geometrische Bildtransformationen ............................................................
Vordefinierte Bildfilter .......................................................................................
Eigene Pixeloperationen ....................................................................................
Bildverbesserungen .............................................................................................
978
979
979
980
981
982
983
984
23
Inhalt
42.9.9 Zeichenoperationen ............................................................................................
42.9.10 Interoperabilität ...................................................................................................
985
986
43 Von Python 2 nach Python 3
987
43.1 Die wichtigsten Unterschiede .......................................................................................
990
43.1.1
43.1.2
43.1.3
43.1.4
43.1.5
43.1.6
43.1.7
Ein-/Ausgabe .........................................................................................................
Iteratoren ................................................................................................................
Strings ......................................................................................................................
Ganze Zahlen .........................................................................................................
Exception Handling .............................................................................................
Standardbibliothek ..............................................................................................
Neue Sprachelemente in Python 3 .................................................................
990
991
992
993
994
994
995
43.2 Automatische Konvertierung ........................................................................................
996
43.3 Geplante Sprachelemente ..............................................................................................
999
A
Anhang
A.1
Reservierte Wörter ............................................................................................................. 1001
A.2
Eingebaute Funktionen .................................................................................................... 1001
A.3
Eingebaute Exceptions ..................................................................................................... 1005
A.4
Python IDEs ............................................................................................................................ 1009
1001
Index ........................................................................................................................................................ 1017
24
Index
Index
__abs__ ................................................................... 377
__add__ ......................................................... 375, 380
__and__ .................................................................. 375
__annotations__ ................................................. 283
__bool__ ................................................................. 364
__bytes__ ............................................................... 364
__call__ ................................................ 364, 366, 439
__complex__ .............................................. 364, 379
__contains__ ........................................................ 380
__debug__ ............................................................. 397
__del__ .......................................................... 364, 365
__delattr__ ............................................................. 368
__delitem__ .......................................................... 380
__dict__ ........................................................ 367, 368
__divmod__ .......................................................... 375
__enter__ ..................................................... 379, 433
__eq__ ..................................................................... 374
__exit__ ........................................................ 379, 433
__float__ ....................................................... 364, 379
__floordiv__ .......................................................... 375
__future__ ............................................................. 999
__ge__ ...................................................................... 374
__getattr__ ............................................................ 368
__getattribute__ .................................................. 368
__getitem__ .......................................................... 380
__gt__ ...................................................................... 374
__hash__ ...................................................... 365, 367
__iadd__ ....................................................... 377, 380
__iand__ ................................................................. 377
__ifloordiv__ ........................................................ 377
__ilshift__ .............................................................. 377
__imod__ ............................................................... 377
__imul__ ....................................................... 377, 381
__index__ .............................................................. 365
__init__ ................................................................... 364
__init__.py ................................................... 317, 320
__int__ .................................................................... 379
__invert__ .............................................................. 377
__ior__ .................................................................... 377
__ipow__ ................................................................ 377
__irshift__ .............................................................. 377
__isub__ .................................................................. 377
__iter__ ......................................................... 380, 410
__itruediv__ .......................................................... 377
__ixor__ .................................................................. 377
__le__ ....................................................................... 374
__len__ .................................................................... 380
__lshift__ ............................................................... 375
__lt__ ....................................................................... 374
__mod__ ................................................................ 375
__mul__ ......................................................... 375, 381
__ne__ ..................................................................... 374
__neg__ .................................................................. 377
__next__ ................................................................ 411
__or__ ..................................................................... 375
__pos__ ................................................................... 377
__pow__ ................................................................. 375
__radd__ ....................................................... 376, 380
__rand__ ................................................................ 376
__rdivmod__ ........................................................ 376
__repr__ ................................................................. 364
__rfloordiv__ ........................................................ 376
__rlshift__ ............................................................. 376
__rmod__ .............................................................. 376
__rmul__ ....................................................... 376, 381
__ror__ .................................................................... 376
__round__ .................................................... 365, 379
__rpow__ ............................................................... 376
__rrshift__ ............................................................. 376
__rshift__ ............................................................... 375
__rsub__ ................................................................. 376
__rtruediv__ ......................................................... 376
__rxor__ ................................................................. 376
__setattr__ ................................................... 368, 369
__setitem__ .......................................................... 380
__slots__ ....................................................... 368, 370
__sub__ ................................................................... 375
__truediv__ ........................................................... 375
__xor__ ................................................................... 375
; ....................................................................................... 59
@ ....................................................................... 438, 937
** .................................................................................. 122
// .......................................................................... 41, 122
\ ...................................................................................... 59
% ................................................................................. 122
2to3 ............................................................................ 996
A
ABC (Programmiersprache) ................................ 31
Abrunden ................................................................ 452
abs .............................................................................. 288
ACP ............................................................................ 926
Administrationsoberfläche ............................. 926
1017
Index
Index
all ................................................................................ 289
Alpha-Blending ..................................................... 864
and ................................................................................ 47
Annotation (einer Funktion) ........................... 282
Anonyme Funktion ............................................. 281
Anti-Aliasing (PyQt) ............................................ 866
Anweisung ................................................................. 57
Anweisungskopf ...................................................... 57
Anweisungskörper ................................................. 57
any .............................................................................. 289
Arbeitsverzeichnis ............................................... 523
Archiv ........................................................................ 535
TAR ........................................................................ 535
ZIP .......................................................................... 535
Areakosinus Hyperbolicus ............................... 455
Areasinus Hyperbolicus .................................... 455
Areatangens Hyperbolicus .............................. 455
argparse .................................................................... 515
Argument ................................................................ 262
Argument (Kommando) ................................... 515
Arithmetischer Ausdruck .......................... 45, 117
Arithmetischer Operator ........................... 45, 121
Arkuskosinus ......................................................... 455
Arkussinus .............................................................. 455
Arkustangens ......................................................... 455
Array (numpy) ....................................................... 734
as ....................................................................... 312, 388
ASCII ................................................................ 192, 198
ascii ............................................................................ 289
assert ......................................................................... 396
Asymmetrische Verschlüsselung .................. 476
Attribut ........................................ 106, 331, 335, 574
Klassenattribut ................................................ 356
Magic Attribute ................................................ 363
Property-Attribut ............................................ 353
Aufrunden .............................................................. 452
Aufzählung ............................................................. 255
Alias ...................................................................... 256
ganzzahlige ....................................................... 257
augmented assignment .................................... 122
Ausdruck ..................................................................... 45
arithmetischer ........................................... 45, 117
Boolescher ................................................... 46, 133
logischer ....................................................... 46, 133
Ausnahme ............................................................... 383
Automatisiertes Testen ..................................... 698
B
Backslash .................................................................... 59
BaseException ....................................................... 385
1018
Basisdatentyp
bool ....................................................................... 133
bytearray ............................................................ 168
bytes ............................................................ 168, 193
complex .............................................................. 138
dict .............................................. 43, 201, 227, 229
float ............................................................... 41, 130
frozenset .................................................... 213, 223
int ................................................................... 40, 125
list ................................................................... 42, 154
NoneType ........................................................... 115
set ................................................................. 213, 221
str .................................................................... 42, 168
tuple ..................................................................... 166
Basisklasse .............................................................. 338
Batteries-included .................................................. 27
Baum ......................................................................... 576
Bedingter Ausdruck ............................................... 69
Betriebssystem ..................................................... 511
Bezeichner ................................................................. 44
Beziérkurve (PyQt) .............................................. 867
Bibliothek ................................................................ 311
Big Endian ............................................................... 512
Bildschirmausgabe ................................................. 49
Bildverarbeitung .................................................. 977
bin .............................................................................. 290
Binärdistribution ........................................ 765, 774
Binärer Operator .................................................. 374
Binärsystem ........................................................... 126
Bindigkeit ................................................................ 118
Bitmap ......................................................................... 89
Bit-Operator ........................................................... 127
Bit-Verschiebung ............................................. 129
bitweises ausschließendes ODER .............. 128
bitweises Komplement ................................. 129
bitweises ODER ................................................ 128
bitweises UND .................................................. 127
Blockchiffre ............................................................ 474
Blockkommentar .................................................... 63
bool ......................................................... 133, 136, 290
Boolescher Ausdruck .................................. 46, 133
Boolescher Operator ............................................. 47
Boolescher Wert ................................................... 133
Borrowed Reference ........................................... 748
break ............................................................................ 71
Breakpoint .............................................................. 688
Brush (PyQt) ........................................................... 857
Bubblesort .............................................................. 732
Bug ............................................................................. 687
Built-in Function ...................... 48, 103, 285, 1001
abs ......................................................................... 288
Built-in Function (Forts.)
all ........................................................................... 289
any ......................................................................... 289
ascii ....................................................................... 289
bin .......................................................................... 290
bool ............................................................. 136, 290
bytearray ............................................................ 290
bytes ..................................................................... 291
chr ................................................................ 193, 291
classmethod ...................................................... 356
complex ............................................................... 292
delattr .................................................................. 358
dict ......................................................................... 292
divmod ................................................................. 293
enumerate .......................................................... 293
eval ........................................................................ 294
exec ....................................................................... 294
filter ............................................................. 295, 401
float ....................................................................... 295
format .................................................................. 296
frozenset ............................................................. 296
getattr .................................................................. 358
globals ................................................................. 296
hasattr ................................................................. 358
hash ...................................................................... 297
help .............................................................. 109, 298
hex ......................................................................... 298
id ..................................................................... 95, 298
input ..................................................................... 298
int ........................................................................... 299
isinstance ............................................................ 358
issubclass ............................................................ 358
iter ......................................................................... 411
len ............................................. 151, 205, 216, 299
list .......................................................................... 300
locals .................................................................... 300
map ............................................................. 300, 401
max .................................................... 103, 152, 302
min .............................................................. 152, 303
next ....................................................................... 414
oct .......................................................................... 303
open .................................................................. 81, 85
ord ............................................................... 193, 303
pow ........................................................................ 303
print ............................................................... 49, 304
property .............................................................. 354
range ................................................... 77, 261, 304
repr ........................................................................ 305
reversed ............................................................... 306
round .................................................................... 306
set .......................................................................... 306
Built-in Function (Forts.)
setattr .................................................................. 358
sorted ................................................................... 307
staticmethod .................................................... 355
str ........................................................................... 307
sum ....................................................................... 308
tuple ..................................................................... 309
type ................................................................ 93, 309
zip .......................................................................... 309
Busy Waiting .......................................................... 635
Button (tkinter) .................................................... 806
bytearray ........................................................ 168, 290
Byte-Code ............................................................ 32, 56
Byte-Order .............................................................. 634
bytes ....................................................... 168, 193, 291
C
C/C++ ........................................................................ 729
Cache (fur Funktion) ........................................... 443
Call by Reference .................................................. 274
Call by Value .......................................................... 274
Callstack ................................................................... 393
Canvas (tkinter) .................................................... 823
case sensitive ............................................................ 44
CBC (Kryptographie) ........................................... 474
ChainMap (Dictionarys) .................................... 225
Checkbox (PyQt) .................................................. 847
Checkbutton (tkinter) ........................................ 806
Chiffrat (Kryptographie) ................................... 473
Child (DOM) ........................................................... 576
chr ..................................................................... 193, 291
class ........................................................................... 333
classmethod ........................................................... 356
Client ................................................................ 621, 622
Client-Server-System ......................................... 621
cmath ........................................................................ 451
cmd ............................................................................ 959
Codepage ................................................................. 192
Codepoint ............................................................... 195
collections .............................................................. 225
ChainMap .......................................................... 225
Counter ...................................................... 227, 229
defaultdict ......................................................... 229
deque .................................................................... 230
namedtuple ....................................................... 232
OrderedDict ....................................................... 233
Combobox (PyQt) ................................................ 848
Compiler .............................................................. 32, 56
Just-in-Time .......................................................... 57
complex .......................................................... 138, 292
1019
Index
Index
Comprehension .......................................... 399, 718
Dict ........................................................................ 402
List ......................................................................... 400
Set .......................................................................... 403
Conditional Expression ........................................ 69
Container ................................................................. 379
contextlib ................................................................ 434
continue ...................................................................... 73
Control (Steuerelement) ................................... 785
copy ........................................................................... 967
Counter .......................................................... 227, 229
cProfile ..................................................................... 710
CPU ............................................................................ 506
CPython ................................................................... 753
Critical Section ............................................ 560, 639
CSV ............................................................................. 612
ctypes ........................................................................ 730
cx_Freeze ................................................................. 777
D
Date Edit (PyQt) .................................................... 849
Datei ............................................................................. 80
temporäre ........................................................... 541
Dateiähnliches Objekt ........................................ 507
Dateideskriptor ........................................................ 87
Dateidialog (tkinter) ........................................... 831
Dateiobjekt ............................................... 81, 87, 641
Dateipfad ................................................................. 530
Dateisystem ........................................................... 523
Dateizugriffsrechte ............................................. 525
Datenbank ............................................................... 587
Cursor ................................................................... 591
Join ........................................................................ 598
Query .................................................................... 587
Transaktion ....................................................... 593
Datenstrom ............................................................... 79
Datentyp ........................................................... 93, 733
immutabler ................................................. 99, 168
Konvertierung .................................................. 124
mutabler ................................................................ 99
sequenzieller ...................................................... 141
datetime ................................................................... 243
Datum ....................................................................... 235
Deadlock .................................................................. 567
Debugging ............................................................... 687
Breakpoint .......................................................... 688
Post Mortem ...................................................... 689
decimal ..................................................................... 460
Decorator
(einer Funktion) ................................................ 438
1020
def .............................................................................. 263
defaultdict .............................................................. 229
del ............................................................... 97, 156, 205
delattr ....................................................................... 358
Delegate (PyQt) ..................................................... 871
deque (verkettete Liste) ..................................... 230
Deserialisieren ...................................................... 607
Dezimalsystem ..................................................... 125
Dialog (PyQt) ................................................ 844, 849
dict ............................................................. 43, 201, 292
Dict Comprehension .......................................... 402
Dictionary ..................................... 43, 201, 227, 229
sortiertes ............................................................. 233
verkettetes ......................................................... 225
Differenzmenge ................................................... 219
Diffie-Hellman-Protokoll ................................. 476
Distribution ........................................................... 765
distutils ........................................................... 766, 767
divmod ..................................................................... 293
Django ...................................................................... 884
Applikation ............................................... 885, 892
Field Lookup ...................................................... 901
Migration ........................................................... 896
Projekt ................................................................. 885
View ...................................................................... 903
DLL ............................................................................. 730
Docstring ................................................................. 698
doctest ...................................................................... 698
Doktorarbeit .......................................................... 150
Dokumentation ........................................... 109, 723
DOM .......................................................................... 575
Child ..................................................................... 576
Elternelement ................................................... 576
Geschwisterelement ....................................... 576
Kindelement ...................................................... 576
Knoten ................................................................. 575
Node ..................................................................... 575
Parent .................................................................. 576
Sibling .................................................................. 576
DRY-Prinzip (Django) ......................................... 885
DSA (Kryptographie) .......................................... 477
Dualsystem ................................................... 126, 127
Duck-Typing .......................................................... 378
Dynamic Link Library ........................................ 730
Dynamische Bibliothek ..................................... 730
E
EasyInstall ............................................................... 766
ECB (Kryptographie) ........................................... 474
Echte Teilmenge ................................................... 217
Eclipse mit PyDev (IDE) ................................... 1010
Egg .............................................................................. 766
Einerkomplement ............................................... 129
Eingabeaufforderung ......................................... 515
Eingabeprompt ........................................................ 58
Eingebaute Exception ........................................ 384
Eingebaute Funktion 씮 Built-in Function
Eingebettete Skriptsprache .............................. 748
Einrückung ................................................................ 58
Eins-zu-viele-Relation ........................................ 895
Einwegcodierung ................................................. 468
ElementTree (XML) .............................................. 575
ElGamal (Kryptographie) .................................. 477
elif .................................................................................. 66
else ........................................................ 67, 69, 72, 389
Elternelement (DOM) ......................................... 576
E-Mail ........................................................................ 654
Header ................................................................. 669
email .......................................................................... 668
Embedded Script Language ............................. 748
Encoding-Deklaration ........................................ 200
Entry-Widget (tkinter) ........................................ 809
Entwicklungsumgebung (IDE) .............. 35, 1009
Entwicklungswebserver (Django) .................. 889
enum ......................................................................... 255
enumerate .............................................................. 293
EOF ................................................................................ 80
Eric (IDE) ................................................................ 1011
Erweiterte Zuweisung .............................. 122, 376
Escape-Sequenz ................................. 171, 194, 487
ESMTP ....................................................................... 655
eval ............................................................................. 294
Even (PyQt)t ........................................................... 882
Event (PyQt) ........................................................... 844
Event (tkinter) ....................................................... 796
Eventhandler (PyQt) ........................................... 844
except ....................................................................... 386
Exception ....................... 383, 720, 744, 994, 1005
BaseException .................................................. 385
Chaining .............................................................. 395
eingebaute ......................................................... 384
erneut werfen .................................................... 392
fangen .................................................................. 386
werfen .................................................................. 385
exec ............................................................................ 294
Exit Code .................................................................. 509
Exponent ....................................................... 131, 452
Exponentialfunktion .......................................... 454
Exponentialschreibweise ................................. 131
Extension ...................................................... 739, 768
F
Factory Function .................................................. 356
Fakultät ....................................................................... 73
Fallunterscheidung ................................................ 65
False .................................................................... 46, 133
Farbverlauf (PyQt) ............................................... 864
Fenster ...................................................................... 785
Fibonacci-Folge ..................................................... 411
Field Lookup (Django) ........................................ 901
file object 씮 Dateiobjekt
File Transfer Protocol ......................................... 648
filter .................................................................. 295, 401
Filter (Django) ....................................................... 914
finally ........................................................................ 389
Finder (importlib) ................................................ 323
Flag (RegExp) ......................................................... 496
float ........................................................... 41, 130, 295
Font (tkinter) ......................................................... 832
for ........................................................................ 75, 400
format ...................................................................... 296
Fortschrittsbalken ............................................... 851
from ................................................................. 312, 319
frozenset .............................................. 213, 223, 296
FTP ............................................................................. 648
Modus .................................................................. 649
ftplib .......................................................................... 648
Function Annotation ......................................... 282
Function Decorator ............................................ 438
functools ................................................................. 440
Funktion .................................................. 48, 103, 261
Annotation ........................................................ 282
anonyme ............................................................ 281
Argument ........................................................... 262
Aufruf ................................................... 48, 262, 719
Definition ........................................................... 263
eingebaute ......................................................... 285
Körper .................................................................. 263
lokale .................................................................... 279
Name .................................................................... 263
Namensraum .................................................... 277
optionaler Parameter ................................... 267
Parameter ................................................. 262, 267
reiner Schlüsselwortparameter ................. 271
rekursive ............................................................. 284
Rückgabewert .......................................... 262, 263
Schlüsselwortparameter .............................. 268
Schnittstelle ....................................................... 263
überladen ........................................................... 445
Funktionsaufruf ................................... 48, 262, 719
Funktionsiterator ................................................ 420
1021
Index
Index
Funktionsname .................................................... 263
Funktionsobjekt ................................................... 266
Funktionsparameter .............................................. 48
G
Ganze Zahl ............................................. 40, 125, 993
Garbage Collection ................................................. 97
Gauß-Verteilung ................................................... 458
Geliehene Referenz ............................................. 748
Generator ...................................................... 403, 962
konsumierender ............................................... 962
Subgenerator .................................................... 406
Generator Expression ........................................ 409
Geplantes Sprachelement ................................ 999
Geschwisterelement (DOM) ............................ 576
GET (HTTP) .............................................................. 923
getattr ....................................................................... 358
getpass ...................................................................... 958
Getter-Methode .................................................... 352
gettext ...................................................................... 779
Sprachkompilat ............................................... 781
Gleichverteilung ................................................... 458
Gleitkommazahl ............................................ 41, 130
global ......................................................................... 279
Globale Referenz .................................................. 277
Globale Variable ................................................... 545
Globaler Namensraum ...................................... 277
Globales Modul ..................................................... 311
globals ....................................................................... 296
GNU gettext API ................................................... 779
Goldener Schnitt .................................................. 411
Grafiken (PyQt) ..................................................... 860
Grafische Benutzeroberfläche ........................ 785
Gtk .............................................................................. 786
GUI ............................................................................. 785
Layout ........................................................ 792, 836
Modaler Dialog ................................................ 849
PyQt (Toolkit) .................................................... 834
tkinter (Toolkit) ................................................ 786
Zeichnen (PyQt) ................................................ 855
Zeichnen (tkinter) ............................................ 823
gzip ............................................................................. 571
H
hasattr .......................................................................
hash ...........................................................................
hashable ...................................................................
Hash-Funktion ......................................................
1022
358
297
367
467
Hash-Kollision ...................................................... 468
hashlib ...................................................................... 467
Hash-Wert ...................................................... 203, 467
Häufigkeitsverteilung ........................................ 226
help ................................................................... 109, 298
hex ............................................................................. 298
Hexadezimalsystem ........................................... 126
Hilfe ........................................................................... 109
History-Funktion .................................................... 39
Hook (Funktion) ................................................... 512
HTML ........................................................................ 499
Hyperbolische Funktion ................................... 454
I
id .......................................................................... 95, 298
IDE ............................................................................ 1009
Eclipse (PyDev) ............................................... 1010
Eric ...................................................................... 1011
IDLE ......................................................................... 35
Komodo IDE .................................................... 1011
PyCharm ........................................................... 1012
Python Tools for Visual Studio (PTVS) . 1013
Spyder ................................................................ 1013
Wing IDE ........................................................... 1014
Identität (einer Instanz) ....................................... 95
Identitätenvergleich (von Instanzen) ............ 96
IDLE ............................................................. 34, 35, 688
if .................................................................... 66, 69, 400
Imaginärteil ........................................................... 139
IMAP4 ....................................................................... 662
Mailbox ............................................................... 663
imaplib ..................................................................... 662
immutabel ....................................................... 99, 168
immutable .............................................................. 717
import ................................................... 311, 319, 999
absoluter ............................................................ 321
relativer ............................................................... 321
Importer .................................................................. 321
importlib ................................................................. 321
Finder ................................................................... 323
Loader .................................................................. 324
in ..................................................... 143, 206, 217, 400
Index (in einer Sequenz) ................................... 147
IndexError .............................................................. 148
inf ............................................................ 132, 452, 464
Informationsquellen .......................................... 109
in-place .................................................................... 146
input ......................................................................... 298
Installationsskript ............................................... 769
Instanz ........................................................ 49, 91, 332
Datentyp ................................................................ 93
Identität ................................................................. 95
Wert ......................................................................... 94
Instanziierung ................................................ 48, 332
int .............................................................. 40, 125, 299
Integer-Division ...................................................... 41
Integrated Development Environment (IDE) ....
1009
IntEnum ................................................................... 257
Interaktive Hilfe ................................................... 109
Interaktiver Modus ......................................... 34, 39
History-Funktion ................................................ 39
Internationalisierung ......................................... 779
Interpreter .......................................................... 32, 56
CPython ............................................................... 753
IronPython ......................................................... 759
Jython ................................................................... 754
PyPy ...................................................................... 721
io.StringIO ............................................................... 961
IP-Adresse ............................................................... 621
IPv6 ............................................................................ 630
IPython ..................................................................... 971
Notebook ............................................................ 974
IronPython ............................................................. 759
is ........................................................................... 96, 115
isinstance ................................................................ 358
issubclass ................................................................. 358
iter .............................................................................. 411
Iterator ........................................................... 410, 991
Iterator-Protokoll .......................................... 75, 410
Iterierbares Objekt ........................................ 75, 410
gruppieren .......................................................... 426
Kartesisches Produkt ..................................... 428
Kombination ..................................................... 423
Partialsumme ................................................... 423
Permutation ...................................................... 427
verketten ............................................................. 423
wiederholen ....................................................... 429
itertools .................................................................... 421
J
Join (SQL) ................................................................. 598
Jupyter ...................................................................... 974
Just-in-Time Compiler .......................................... 57
PyPy ...................................................................... 721
Jython ....................................................................... 754
K
Kartesische Koordinaten .................................. 456
Kartesisches Produkt ......................................... 428
Keyword Argument ......................... 105, 268, 721
Kindelement (DOM) ........................................... 576
Klartext (Kryptographie) .................................. 473
Klasse ........................................................................ 332
Attribut ............................................................... 335
Basisklasse ......................................................... 338
Instanz ................................................................. 332
Konstruktor ....................................................... 334
Methode .............................................................. 333
Klassenattribut ..................................................... 356
Klassenmethode .................................................. 356
Knoten (DOM) ....................................................... 575
Kombination ......................................................... 423
Kommandozeilen-Interpreter ....................... 959
Kommandozeilenparameter ................. 508, 515
Kommentar ............................................................... 63
Kommunikationssocket ................................... 622
Komodo IDE ......................................................... 1011
Komplexe Zahl ............................................. 138, 455
Imaginärteil ...................................................... 139
konjugierte ........................................................ 140
Realteil ................................................................. 139
Konsole .................................................................... 515
Konsolenanwendung ............................................ 53
Konstruktor ........................................................... 334
Factory Function ............................................. 356
Konsument (Generator) ................................... 962
Kontext-Manager ....................................... 379, 432
Kontextobjekt ....................................................... 431
Kontrollstruktur ..................................................... 65
Conditional Expression ................................... 69
Fallunterscheidung ........................................... 65
Schleife ................................................................... 70
Konvexes Polygon .............................................. 828
Koordinatensystem ............................................ 823
Koordinatensystem (PyQt) .............................. 857
Koordinierte Weltzeit ........................................ 235
Körperloses Tag (XML) ....................................... 574
Kosinus .................................................................... 454
Kosinus Hyperbolicus ....................................... 455
L
Label (tkinter) ........................................................
LabelFrame (tkinter) ...........................................
lambda .....................................................................
Laufzeitmessung ..................................................
810
810
281
707
1023
Index
Index
Laufzeitmodell ......................................................... 91
Laufzeitoptimierung .......................................... 716
Laufzeitverhalten ................................................. 706
Layout (PyQt) ......................................................... 836
Layout (tkinter) ..................................................... 792
Lazy Evaluation .............................................. 70, 137
Leichtgewichtprozess ......................................... 545
len .................................................. 151, 205, 216, 299
Line Edit (PyQt) ..................................................... 850
list .............................................................. 42, 154, 300
List Comprehension ................................. 400, 718
Listbox (tkinter) .................................................... 811
Liste ..................................................................... 42, 154
doppelt verkettete ........................................... 230
Seiteneffekt ........................................................ 164
ListWidget (PyQt) ................................................. 850
Literal ........................................................................... 39
Little Endian ........................................................... 512
Loader (importlib) ............................................... 324
locals .......................................................................... 300
Lock-Objekt ............................................................. 560
Logarithmusfunktion ........................................ 454
Logdatei ................................................................... 691
logging ...................................................................... 691
Logging Handler ................................................... 696
Logischer Ausdruck ...................................... 46, 133
Logischer Operator .............................................. 133
logische Negierung ......................................... 133
logisches ODER ................................................. 134
logisches UND ................................................... 134
Lokale Funktion .................................................... 279
Lokale Referenz ..................................................... 277
Lokaler Namensraum ......................................... 277
Lokales Modul ............................................. 311, 314
Lokalisierung ......................................................... 779
Lokalzeit ................................................................... 235
long ............................................................................ 125
Lookup ...................................................................... 720
Loose Coupling (Django) ................................... 885
M
Magic Attribute ..................................................... 363
_ _annotations_ _ ............................................ 283
_ _dict_ _ ................................................... 367, 368
_ _doc_ _ .............................................................. 724
_ _slots_ _ .................................................. 368, 370
Magic Line (Programmkopf) .............................. 55
Magic Method ....................................................... 363
_ _abs_ _ .............................................................. 377
_ _add_ _ ................................................... 375, 380
1024
Magic Method (Forts.)
_ _and_ _ ............................................................. 375
_ _bytes_ _ .......................................................... 364
_ _call_ _ ........................................... 364, 366, 439
_ _complex_ _ .......................................... 364, 379
_ _contains_ _ ................................................... 380
_ _del_ _ ...................................................... 364, 365
_ _delattr_ _ ....................................................... 368
_ _delitem_ _ ..................................................... 380
_ _div_ _ .............................................................. 375
_ _divmod_ _ ..................................................... 375
_ _enter_ _ ................................................. 379, 433
_ _eq_ _ ................................................................ 374
_ _exit_ _ .................................................... 379, 433
_ _float_ _ .................................................. 364, 379
_ _floordiv_ _ ..................................................... 375
_ _ge_ _ ................................................................ 374
_ _getattr_ _ ...................................................... 368
_ _getattribute_ _ ............................................ 368
_ _getitem_ _ ............................................ 380, 419
_ _gt_ _ ................................................................. 374
_ _hash_ _ .................................................. 365, 367
_ _iadd_ _ ................................................... 377, 380
_ _iand_ _ ........................................................... 377
_ _idiv_ _ ............................................................. 377
_ _ifloordiv_ _ ................................................... 377
_ _ilshift_ _ ......................................................... 377
_ _imod_ _ .......................................................... 377
_ _imul_ _ .................................................. 377, 381
_ _index_ _ ................................................ 365, 379
_ _init_ _ .............................................................. 364
_ _int_ _ ............................................................... 379
_ _invert_ _ ......................................................... 377
_ _ior_ _ ............................................................... 377
_ _ipow_ _ ........................................................... 377
_ _irshift_ _ ......................................................... 377
_ _isub_ _ ............................................................ 377
_ _iter_ _ ..................................................... 380, 410
_ _ixor_ _ ............................................................ 377
_ _le_ _ ................................................................. 374
_ _len_ _ ............................................................... 380
_ _lshift_ _ .......................................................... 375
_ _lt_ _ .................................................................. 374
_ _mod_ _ ........................................................... 375
_ _mul_ _ .................................................... 375, 381
_ _ne_ _ ................................................................ 374
_ _neg_ _ ............................................................. 377
_ _next_ _ ............................................................ 411
_ _nonzero_ _ .................................................... 364
_ _or_ _ ................................................................ 375
_ _pos_ _ .............................................................. 377
Magic Method (Forts.)
_ _pow_ _ ............................................................ 375
_ _radd_ _ ................................................. 376, 380
_ _rand_ _ ........................................................... 376
_ _rdiv_ _ ............................................................. 376
_ _rdivmod_ _ .................................................... 376
_ _repr_ _ ............................................................. 364
_ _rfloordiv_ _ ................................................... 376
_ _rlshift_ _ ......................................................... 376
_ _rmod_ _ .......................................................... 376
_ _rmul_ _ ................................................. 376, 381
_ _ror_ _ ............................................................... 376
_ _round_ _ ............................................... 365, 379
_ _rpow_ _ ........................................................... 376
_ _rrshift_ _ ........................................................ 376
_ _rshift_ _ .......................................................... 375
_ _rsub_ _ ............................................................ 376
_ _rxor_ _ ............................................................ 376
_ _setattr_ _ ............................................. 368, 369
_ _setitem_ _ ...................................................... 380
_ _str_ _ ................................................................ 364
_ _sub_ _ .............................................................. 375
_ _xor_ _ .............................................................. 375
Mailbox .................................................................... 663
Main Event Loop (PyQt) .................................... 843
Mantisse ........................................................ 131, 452
map ......................................................... 300, 401, 718
Mapping ................................................................... 201
Matching (RegExp) ........................... 481, 498, 500
Match-Objekt (RegExp) ...................................... 498
math .......................................................................... 451
MATLAB ................................................................... 933
matplotlib ..................................................... 933, 940
max ......................................................... 103, 152, 302
MD5 ............................................................................ 469
Mehrfachvererbung ............................................ 351
Member .................................................................... 331
Memory Leak ......................................................... 748
Menge ....................................................................... 213
Differenz .............................................................. 219
Echte Teilmenge ............................................... 217
Schnitt .................................................................. 218
Symmetrische Differenz ............................... 219
Teilmenge ........................................................... 217
Vereinigung ....................................................... 217
Menu (tkinter) ....................................................... 814
Menubutton (tkinter) ......................................... 816
Menüleiste (tkinter) ............................................ 814
Message Box (tkinter) ......................................... 832
Metaklasse ........................................... 332, 357, 361
Method Table ......................................................... 740
Methode ........................................ 49, 104, 331, 333
Definition ........................................................... 333
Getter-Methode ............................................... 352
Klassenmethode .............................................. 356
Magic Method .................................................. 363
Setter-Methode ................................................ 352
statische .............................................................. 355
überschreiben ................................................... 340
Migration (Django) ............................................. 896
MIME ......................................................................... 668
min ................................................................... 152, 303
Modaler Dialog (PyQt) ....................................... 849
Model ........................................................................ 893
Model (Django) ..................................................... 884
Model-API (Django) ............................................ 897
Model-Klasse (PyQt) ........................................... 867
Model-View-Konzept ......................................... 893
Model-View-Konzept (Django) ....................... 884
Model-View-Konzept (PyQt) .................. 836, 867
Modifier (tkinter) ................................................. 797
Modul .............................................................. 311, 768
ausführen ........................................................... 316
globales ............................................................... 311
lokales ......................................................... 311, 314
Namenskonflikt ............................................... 315
Modularisierung .................................................. 311
Modulo ..................................................................... 452
Monty Python .......................................................... 31
Multicall .................................................................. 682
Multiplexender Server ............................. 622, 635
Multitasking .......................................................... 543
mutabel ............................................................ 99, 717
N
namedtuple ............................................................ 232
Namenskonflikt ................................................... 315
Namensraum ............................................... 277, 312
globaler ............................................................... 277
lokaler .................................................................. 277
Namespace Package ............................................ 320
nan .......................................................... 132, 453, 464
ndarray (numpy) .................................................. 937
Netzwerk-Byte-Order ......................................... 634
next ........................................................................... 414
Nichtkonvexes Polygon .................................... 828
Nicht-modaler Dialog ........................................ 850
Node (DOM) ........................................................... 575
None .......................................................................... 115
NoneType ................................................................ 115
nonlocal ................................................................... 280
1025
Index
Index
Normalverteilung ................................................ 458
not ....................................................................... 46, 133
Not a number (nan) ............................................. 132
not in ...................................................... 144, 206, 217
NotImplemented ................................................. 378
numpy ...................................................................... 933
ndarray ...................................................... 937, 943
O
Objekt .............................................................. 327, 331
Objektorientierung ............................................. 327
oct ............................................................................... 303
Öffentlicher Schlüssel ........................................ 476
Oktalsystem ........................................................... 125
One-To-Many Relation ...................................... 895
open ....................................................................... 81, 85
Operand ................................................................... 117
Operator ..................................................... 40, 45, 117
arithmetischer ........................................... 45, 121
binärer ................................................................. 374
Bit-Operator ...................................................... 127
boolescher ............................................................. 47
logische Negierung ......................................... 133
logischer .............................................................. 133
logisches ODER ................................................. 134
logisches UND ................................................... 134
überladen ........................................................... 370
unärer .................................................................. 377
Vergleichsoperator ........................ 46, 123, 373
Operatorrangfolge ............................................... 118
Optimierung .......................................................... 716
Option (Kommando) .......................................... 515
Option Menu (tkinter) ....................................... 817
Optionaler Parameter ........................................ 105
or .................................................................................... 47
ord .................................................................... 193, 303
OrderedDict ............................................................ 233
Ordnungsrelation ................................................ 444
os ....................................................................... 505, 523
os.path ...................................................................... 530
OSI-Schichtenmodell .......................................... 619
P
Packer (tkinter) ............................................ 789, 792
Padding (tkinter) .................................................. 795
Painter (PyQt) ........................................................ 856
Painter Path (PyQt) .............................................. 867
Paket ................................................................ 317, 768
_ _init_ _.py .............................................. 317, 320
1026
Paket (Forts.)
Namespace Package ...................................... 320
Paralleler Server ................................................... 622
Parameter ..................................... 48, 104, 262, 267
beliebige Anzahl .............................................. 269
entpacken ........................................................... 272
optionaler ................................................. 105, 267
positionsbezogener ........................................ 104
rein schlüsselwortbezogen .......................... 106
schlüsselwortbezogener ............................... 105
Parent (DOM) ........................................................ 576
Parser (XML) ........................................................... 574
Partialsumme ........................................................ 423
pass ............................................................................... 78
Passwort .................................................................. 471
Passworteingabe .................................................. 958
PDB (Python Debugger) .................................... 687
Pen (PyQt) ............................................................... 856
PEP ............................................................................. 110
PEP 249 (Datenbanken) ................................ 588
PEP 257 (Docstrings) ....................................... 111
PEP 8 (Style Guide) .......................................... 111
Permutation .......................................................... 427
Pfad ......................................................... 508, 523, 530
pickle ......................................................................... 607
PIL .............................................................................. 978
Pillow ........................................................................ 977
pip ..................................................................... 767, 778
Pipe ............................................................................ 490
PKCS#1 (Kryptographie) ................................... 478
PKDF2 ....................................................................... 472
Plattformunabhängigkeit ................................... 32
Polarkoordinaten ................................................ 456
Polygon ........................................................... 828, 860
POP3 .......................................................................... 658
poplib ........................................................................ 658
Port ............................................................................ 621
Positional Argument .......................................... 268
POST (HTTP) ........................................................... 923
Post-Mortem Debugger .................................... 689
pow ............................................................................ 303
pprint ........................................................................ 690
Primzahl .................................................................. 558
print .......................................................... 49, 304, 990
privater Schlüssel ................................................ 476
Profiler ..................................................................... 710
Programmdatei ....................................................... 53
Programmierparadigma ...................................... 32
Progress Bar (PyQt) ............................................. 851
property ................................................................... 354
Property-Attribut ................................................ 353
Protokollebene ...................................................... 619
Prozedur .................................................................. 261
Prozess ............................................................ 506, 543
Prozessor ................................................................. 506
Pseudozufallszahl ................................................ 456
PSF (Organisation) .................................................. 32
PSF-Lizenz .................................................................. 33
Push Button (PyQt) ............................................. 852
PyCharm (IDE) ..................................................... 1012
PyCrypto .................................................................. 472
PyGtk ......................................................................... 786
pyplot (matplotlib) .............................................. 940
PyPy .............................................................................. 57
PyQt ................................................................. 786, 834
Alpha-Blending ................................................ 864
Anti-Aliasing ..................................................... 866
Beziérkurve ........................................................ 867
Brush .................................................................... 857
Checkbox ............................................................ 847
Combobox .......................................................... 848
Date Edit ............................................................. 849
Delegate .............................................................. 871
Dialog ......................................................... 844, 849
Event ........................................................... 844, 882
Eventhandler ..................................................... 844
Farbverlauf ........................................................ 864
Grafiken .............................................................. 860
Koordinatensystem ........................................ 857
Layout .................................................................. 836
Line Edit ............................................................... 850
ListWidget .......................................................... 850
Main Event Loop .............................................. 843
Modaler Dialog ................................................ 849
Model-Klasse ..................................................... 867
Model-View-Konzept ........................... 836, 867
Painter ................................................................. 856
Painter Path ....................................................... 867
Pen ......................................................................... 856
Progress Bar ....................................................... 851
Push Button ....................................................... 852
QML ...................................................................... 836
Radiobutton ...................................................... 852
Signal .......................................................... 835, 844
Slider ..................................................................... 852
Slot .............................................................. 835, 844
Splitter ................................................................. 840
Text Edit .............................................................. 853
Text zeichnen .................................................... 861
Transformation ................................................ 866
Transparenz ...................................................... 864
UI-Datei ............................................................... 843
PyQt (Forts.)
View-Klasse ....................................................... 867
Widget .............................................. 837, 847, 854
Zeichnen ............................................................. 855
PySide ....................................................................... 787
Python 2 .................................................................. 987
Konvertierung .................................................. 996
Python API ....................................................... 32, 739
Python Enhancement Proposal 씮 PEP
Python Imaging Library (PIL) ......................... 978
Python Package Index (PyPI) .......................... 767
Python Package Manager (PyPI) .................... 778
Python Software Foundation ............................ 32
Python Tools for Visual Studio (IDE) ......... 1013
Python-Shell ............................................................. 34
Python-Version .................................................... 510
Python-Website ....................................................... 34
Q
QML (PyQt) ............................................................. 836
qNEW (Kryptographie) ...................................... 477
Qt ....................................................................... 786, 834
Qt Designer ............................................................ 838
Quantor
genügsamer ...................................................... 488
Quantor (RegExp) ................................................ 483
Quellcodedistribution .............................. 765, 774
Quelltext .................................................................... 53
Query (Datenbank) ............................................. 587
Queue (Netzwerk) ................................................ 622
R
Radiobutton (PyQt) ............................................. 852
Radiobutton (tkinter) ......................................... 808
Rainbow Table ....................................................... 472
raise ........................................................................... 385
random .................................................................... 456
range ......................................................... 77, 261, 304
Rapid Prototyping .................................................. 34
Raspberry Pi .............................................................. 33
raw_input ............................................................... 991
Raw-String .............................................................. 172
Realteil ..................................................................... 139
Reference Count ............................................ 98, 747
Referenz ...................................................................... 91
geliehene ............................................................ 748
globale ................................................................. 277
lokale .................................................................... 277
RegExp 씮 Regulärer Ausdruck
1027
Index
Index
Regulärer Ausdruck ............................................. 481
Alternative ......................................................... 490
Extension ............................................................ 490
Flag ........................................................................ 496
Gruppe ................................................................. 489
Matching .................................................. 498, 500
Match-Objekt .................................................... 498
Quantor ..................................................... 483, 488
Searching ............................................................ 499
Sonderzeichen ................................................... 487
Syntax .................................................................. 481
Zeichenklasse .......................................... 482, 485
Zeichenliteral .................................................... 481
Reiner Schlüsselwortparameter .................... 106
Rekursion ................................................................ 284
Rekursionstiefe ................................................. 284
Relationale Datenbank ...................................... 587
repr ............................................................................. 305
Reserviertes Wort ....................................... 45, 1001
return ........................................................................ 265
reversed ................................................................... 306
ROT13 ......................................................................... 745
round ........................................................................ 306
RPM ............................................................................ 775
RSA (Kryptographie) ........................................... 476
Rückgabewert .............................. 48, 103, 262, 263
S
Salt .............................................................................. 468
SAX ............................................................................. 583
SAX (XML) ............................................................... 583
Schaltsekunde ....................................................... 237
Schlafender Thread ............................................. 544
Schleife .............................................................. 70, 718
break ........................................................................ 71
continue ................................................................. 73
else ............................................................................ 72
for ............................................................................. 75
Schleifenkörper ................................................... 70
while-Schleife ....................................................... 70
Zählschleife ........................................................... 77
Schlüssel .................................................................. 473
öffentlicher ......................................................... 476
privater ................................................................ 476
Schlüsselaustausch ............................................. 476
Schlüssel-Wert-Paar ............................................ 201
Schlüsselwort ............................................... 45, 1001
and ........................................................................... 47
as ............................................................................ 312
assert .................................................................... 396
1028
Schlüsselwort (Forts.)
break ....................................................................... 71
class ...................................................................... 333
continue ................................................................. 73
def .......................................................................... 263
del .......................................................... 97, 156, 205
elif ............................................................................. 66
else ................................................... 67, 69, 72, 389
except .................................................................. 386
False ............................................................... 46, 133
finally ................................................................... 389
for ................................................................... 75, 400
from ............................................................. 312, 319
global ................................................................... 279
if ............................................................... 66, 69, 400
import ............................................... 311, 319, 999
in ................................................ 143, 206, 217, 400
is ...................................................................... 96, 115
lambda ................................................................ 281
None ..................................................................... 115
nonlocal .............................................................. 280
not .................................................................. 46, 133
not alias .............................................................. 206
not in ........................................................... 144, 217
or ............................................................................... 47
pass .......................................................................... 78
raise ...................................................................... 385
return ................................................................... 265
True ................................................................ 46, 133
try .......................................................................... 386
while ........................................................................ 70
wisth ..................................................................... 431
with .......................................................................... 84
yield ............................................................. 404, 962
Schlüsselwortparameter .......................... 105, 268
reiner .................................................................... 271
Schnittmenge ........................................................ 218
Schnittstelle ............................... 104, 263, 440, 735
Schriftart (tkinter) ............................................... 832
Scilab ......................................................................... 933
scipy ................................................................. 933, 951
Scrollbar (tkinter) ................................................. 818
Searching ....................................................... 481, 499
Seiteneffekt ................................ 102, 164, 274, 968
select ......................................................................... 635
self .............................................................................. 333
Semikolon .................................................................. 59
Sequenzieller Datentyp ..................................... 141
Indizierung ............................................... 147, 153
Länge ................................................................... 151
Maximum .......................................................... 152
Sequenzieller Datentyp (Forts.)
Minimum ............................................................ 152
Slicing ................................................................... 149
Verkettung ......................................................... 145
Serialisieren ............................................................ 607
Serieller Server ...................................................... 622
Server ........................................................................ 621
multiplexender ....................................... 622, 635
paralleler ............................................................. 622
serieller ................................................................ 622
set ............................................................ 213, 221, 306
Set Comprehension ............................................ 403
setattr ........................................................................ 358
Setter-Methode ..................................................... 352
setuptools ............................................................... 766
SHA ............................................................................ 469
Shared Object ......................................................... 730
Shebang ....................................................................... 55
Shell ........................................................................... 515
Shortcut-Funktion ............................................... 910
shutil ......................................................................... 535
Sibling (DOM) ........................................................ 576
Signal (PyQt) ................................................. 835, 844
Signatur (Kryptographie) .................................. 478
Simple API for XML (SAX) ................................. 583
Sinus .......................................................................... 454
Sinus Hyperbolicus ............................................. 455
site-packages .......................................................... 311
Slicing ....................................................................... 149
Slider (PyQt) ........................................................... 852
Slot (PyQt) ..................................................... 835, 844
SMTP ......................................................................... 655
smtplib ..................................................................... 655
Socket ........................................................................ 621
blockierender .................................................... 628
Byte-Order .......................................................... 634
IPv6 ....................................................................... 630
Kommunikationssocket ............................... 622
nicht-blockierender ........................................ 628
Verbindungssocket ......................................... 622
socketserver ........................................................... 637
Sonderzeichen ............................................. 192, 487
sorted ........................................................................ 307
Sortierverfahren
Bubblesort .......................................................... 732
stabiles ................................................................. 161
Speicherzugriffsfehler ........................................ 748
Spinbox (tkinter) .................................................. 820
Splitter (PyQt) ........................................................ 840
Sprachkompilat .................................................... 781
Spyder (IDE) .......................................................... 1013
SQL ............................................................................. 587
SQL Injection ......................................................... 595
SQLite
Adaption ............................................................. 604
Konvertierung .................................................. 604
sqlite3 ....................................................................... 590
Stabiles Sortierverfahren .................................. 161
Standardbibliothek ...................................... 32, 994
argparse .............................................................. 515
cmath ................................................................... 451
cmd ....................................................................... 959
collections .......................................................... 225
contextlib ........................................................... 434
copy ...................................................................... 967
cProfile ................................................................ 710
csv .......................................................................... 612
ctypes ................................................................... 730
datetime ............................................................. 243
decimal ................................................................ 460
distutils ............................................................... 767
doctest ................................................................. 698
ElementTree (XML) ......................................... 575
email .................................................................... 668
enum .................................................................... 255
ftplib ..................................................................... 648
functools ............................................................. 440
getpass ................................................................ 958
gettext ................................................................. 779
gzip ....................................................................... 571
hashlib ................................................................. 467
imaplib ................................................................ 662
importlib ............................................................. 321
io.StringIO .......................................................... 961
itertools ............................................................... 421
logging ................................................................ 691
math ..................................................................... 451
os .................................................................. 505, 530
os.path ................................................................. 530
pickle .................................................................... 607
poplib ................................................................... 658
pprint ................................................................... 690
random ............................................................... 456
select .................................................................... 635
shutil ........................................................... 535, 541
smtplib ................................................................ 655
socket ................................................................... 620
socketserver ....................................................... 637
sqlite3 ................................................................... 590
struct .................................................................... 955
sys .......................................................................... 508
telnetlib ............................................................... 673
1029
Index
Index
Standardbibliothek (Forts.)
tempfile ............................................................... 541
time ....................................................................... 235
timeit .................................................................... 707
tkinter ........................................................ 786, 788
trace ...................................................................... 713
unittest ................................................................ 703
urllib.parse ......................................................... 644
urllib.request ..................................................... 640
webbrowser ....................................................... 955
xml ........................................................................ 573
xmlrpc .................................................................. 676
Standarddialog (tkinter) .................................... 831
Standardpfad ......................................................... 508
staticmethod .......................................................... 355
Statische Methode ............................................... 355
stderr ......................................................................... 509
stdin .................................................................... 80, 509
stdout ................................................................. 80, 509
Steuerelement ....................................................... 785
Steuerelement (tkinter) ..................................... 803
Steuerelementvariable (tkinter) .................... 790
Steuerzeichen ........................................................ 171
str ...................................................... 42, 168, 307, 992
Stream (Datenstrom) ............................................. 79
String ........................................................ 42, 168, 992
Escape-Sequenz ...................................... 171, 194
Formatierung .................................................... 184
Raw-String .......................................................... 172
Sonderzeichen ................................................... 192
Steuerzeichen .................................................... 171
Whitespace ......................................................... 173
Zeilenumbruch ................................................. 171
String-Formatierung .......................................... 184
StringIO .................................................................... 961
Stromchiffre (Kryptographie) ......................... 473
struct ......................................................................... 955
Subgenerator ......................................................... 406
sum ............................................................................ 308
Symmetrische Differenzmenge ..................... 219
Symmetrische Verschlüsselung .................... 473
Syntax .......................................................................... 57
Syntax Error .............................................................. 57
Syntaxanalyse ....................................................... 574
sys ............................................................................... 508
T
Tag
körperloses ......................................................... 574
Tag (Django) ........................................................... 915
1030
Tag (XML) ................................................................ 573
Tangens .................................................................... 455
Tangens Hyperbolicus ....................................... 455
TAR ............................................................................ 535
TCP ............................................................................. 626
Teilmenge ............................................................... 217
Telnet ........................................................................ 673
telnetlib ................................................................... 673
tempfile ................................................................... 541
Template (Django) ............................................... 910
Template-Vererbung (Django) ....................... 917
Temporäre Datei .................................................. 541
Term ............................................................................. 40
Terminator (Iteration) ....................................... 420
Test
automatisierter ............................................... 698
Testen
doctest ................................................................. 698
unittest ................................................................ 703
Text Edit (PyQt) .................................................... 853
Text-Widget (tkinter) ......................................... 820
The Qt Company .................................................. 786
Thread ...................................................................... 545
schlafender ........................................................ 544
time ........................................................................... 235
timeit ........................................................................ 707
Timestamp ............................................................. 235
Tk ................................................................................ 786
tkinter .............................................................. 786, 788
Button .................................................................. 806
Canvas ................................................................. 823
Checkbutton ...................................................... 806
Entry-Widget ..................................................... 809
Event .................................................................... 796
Font ....................................................................... 832
Label ..................................................................... 810
LabelFrame ........................................................ 810
Listbox ................................................................. 811
Menu .................................................................... 814
Menubutton ...................................................... 816
Menüleiste ......................................................... 814
Message Box ..................................................... 832
Modifier .............................................................. 797
Option Menu ..................................................... 817
Packer ......................................................... 789, 792
Padding ............................................................... 795
Radiobutton ...................................................... 808
Schriftart ............................................................ 832
Scrollbar .............................................................. 818
Spinbox ............................................................... 820
Standarddialog ................................................ 831
tkinter (Forts.)
Steuerelement ................................................... 803
Steuerelementvariable .................................. 790
Text-Widget ....................................................... 820
Widget .................................................................. 803
Zeichnen .............................................................. 823
Toolkit
PyGtk .................................................................... 786
PyQt ............................................................ 786, 834
PySide ................................................................... 787
tkinter .................................................................. 786
wxPython ........................................................... 787
Toolkit (GUI) ........................................................... 785
trace ........................................................................... 713
Traceback ....................................................... 384, 513
Traceback-Objekt ................................................. 434
Tracer ........................................................................ 713
Transaktion (Datenbank) .................................. 593
Transformation (PyQt) ...................................... 866
Transmission Control Protocol ...................... 626
Transparenz (PyQt) ............................................. 864
Trigonometrische Funktion ............................ 454
Trolltech ................................................................... 786
True ..................................................................... 46, 133
try ............................................................................... 386
Tupel
benanntes ........................................................... 232
tuple ................................................................ 166, 309
Tuple Packing ........................................................ 166
Tuple Unpacking .................................................. 167
type ..................................................................... 93, 309
U
Überdeckungsanalyse ........................................ 713
UDP ............................................................................ 624
UI-Datei (PyQt) ...................................................... 843
Unärer Operator ................................................... 377
Unendlich ................................................................ 132
Unicode .......................................................... 195, 198
unicode .................................................................... 992
Uniform Resource Locator (URL) 639, 640, 955
Unit Test .................................................................. 703
unittest ..................................................................... 703
Unix-Epoche .......................................................... 235
Unix-Timestamp .................................................. 235
Unveränderlicher Datentyp ............................... 99
URL .......................................................... 639, 640, 955
urllib.parse .............................................................. 644
urllib.request ......................................................... 640
User Datagram Protocol .................................... 624
UTC ............................................................................ 235
UTF ............................................................................. 195
V
Variable ....................................................................... 44
globale ................................................................. 545
Vektorisierung (numpy) ................................... 937
Veränderlicher Datentyp ..................................... 99
Verbindungssocket ............................................. 622
Vereinigungsmenge ........................................... 217
Vererbung ............................................................... 338
Mehrfachvererbung ....................................... 351
Vergleich .................................................................... 46
Vergleichsoperator ............................. 46, 123, 373
Verifikation (Kryptographie) .......................... 479
Verkettung (von Sequenzen) .......................... 145
Verschlüsselung
asymmetrische ................................................. 476
symmetrische ................................................... 473
View (Django) ..................................... 884, 893, 903
View-Klasse (PyQt) .............................................. 867
Virtuelle Maschine ................................................. 56
W
Wahlfreier Zugriff ................................................ 575
Wahrheitswert ............................................... 46, 136
Wallissches Produkt ........................................... 552
webbrowser ............................................................ 955
Wert .............................................................................. 94
boolescher ................................................. 133, 136
Wertevergleich ........................................................ 94
Wheel ........................................................................ 767
while ............................................................................. 70
Whitespace ............................................. 83, 173, 486
Widget ...................................................................... 785
Widget (PyQt) ..................................... 837, 847, 854
Widget (tkinter) .................................................... 803
Wing IDE ................................................................ 1014
with ..................................................................... 84, 431
wxPython ............................................................... 787
X
XML ...........................................................................
Attribut ...............................................................
Deklaration .......................................................
DOM .....................................................................
Parser ...................................................................
SAX ........................................................................
573
574
573
575
574
583
1031
Index
XML (Forts.)
Tag ......................................................................... 573
XML-RPC .................................................................. 676
Multicall .............................................................. 682
Y
yield ................................................................. 404, 962
yield from ................................................................ 407
Z
Zahl
ganze ................................................... 40, 125, 993
Gleitkommazahl ....................................... 41, 130
komplexe ............................................................ 138
Zahlensystem ........................................................ 125
Dezimalsystem ................................................. 125
Dualsystem .............................................. 126, 127
Hexadezimalsystem ....................................... 126
1032
Zahlensystem (Forts.)
Oktalsystem ...................................................... 125
Zählschleife ............................................................... 77
Zeichenkette ............................................................. 42
Zeichenklasse ............................................... 482, 485
Zeichenliteral ........................................................ 481
Zeichensatz ............................................................ 192
Zeichnen (PyQt) .................................................... 855
Zeichnen (tkinter) ................................................ 823
Zeilenkommentar .................................................. 63
Zeit ............................................................................. 235
Zeitscheibe ............................................................. 544
Zeitzone ................................................................... 253
ZIP .............................................................................. 535
zip ............................................................................... 309
zlib ............................................................................. 571
Zuordnung ............................................................. 201
Zuweisung ................................................................. 44
erweiterte .................................................. 122, 376
Zweierkomplement ............................................ 129
Wissen, wie’s geht.
Johannes Ernesti kennt Python wie seine Westentasche.
Gemeinsam mit Peter Kaiser erstellt er professionelle Programme. Er hat Informatik an der Universität in Karlsruhe
studiert.
Peter Kaiser hat Informatik an der Universität in Karlsruhe studiert. Er arbeitet schon länger mit Python und
erstellt professionelle Programme.
Johannes Ernesti, Peter Kaiser
Python 3 – Das umfassende Handbuch
1.032 Seiten, gebunden, mit CD, 4. Auflage 2015
39,90 Euro, ISBN 978-3-8362-3633-1
www.rheinwerk-verlag.de/3789
Wir hoffen sehr, dass Ihnen diese Leseprobe gefallen hat. Sie dürfen sie gerne
empfehlen und weitergeben, allerdings nur vollständig mit allen Seiten. Bitte
beachten Sie, dass der Funktionsumfang dieser Leseprobe sowie ihre Darstellung von der E-Book-Fassung des vorgestellten Buches abweichen können.
Diese Leseprobe ist in all ihren Teilen urheberrechtlich geschützt. Alle Nutzungs- und Verwertungsrechte liegen beim Autor und beim Verlag.
Teilen Sie Ihre Leseerfahrung mit uns!
Herunterladen