Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der...

67
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. 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 »Die Programmiersprache Python« »Erste Schritte im interaktiven Modus« »Der Weg zum ersten Programm« »Funktionen« Inhalt Index Die Autoren Leseprobe weiterempfehlen Wissen, wie’s geht.

Transcript of Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der...

Page 1: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

LeseprobeDieses 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.

Johannes Ernesti, Peter Kaiser

Python 3 – Das umfassende Handbuch1.032 Seiten, gebunden, mit CD, 4. Auflage 2015 39,90 Euro, ISBN 978-3-8362-3633-1

www.rheinwerk-verlag.de/3789

»Die Programmiersprache Python« »Erste Schritte im interaktiven Modus« »Der Weg zum ersten Programm« »Funktionen«

Inhalt

Index

Die Autoren

Leseprobe weiterempfehlen

Wissen, wie’s geht.

Page 2: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

31

2

Kapitel 2

Die Programmiersprache Python

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 darauf-

folgenden fachlichen Einstieg vorbereitet.

2.1 Historie, Konzepte, Einsatzgebiete

2.1.1 Geschichte und Entstehung

Die Programmiersprache Python wurde Anfang der 90er-Jahre von dem Nieder-

lä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 mit-

gewirkt, 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

3633.book Seite 31 Dienstag, 7. Juli 2015 10:30 10

Page 3: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

2 Die Programmiersprache Python

32

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-Konfe-

renzen 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 beispiels-

weise möglich, mit Python objektorientiert und funktional zu programmieren. Soll-

ten 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, han-

delt 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 Ma-

schine, dem Python-Interpreter, ausgeführt.

Ein weiteres Konzept, das Python zum Beispiel mit Java gemeinsam hat, ist die Platt-

formunabhängigkeit. Ein Python-Programm ist auf allen Betriebssystemen unmodi-

fiziert 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 Pro-

grammiersprache, nur eingeschränkte Möglichkeiten zur maschinennahen Pro-

grammierung bietet, können maschinennahe oder zeitkritische Erweiterungen

problemlos in C geschrieben werden. Das ermöglicht die Python API.

3633.book Seite 32 Dienstag, 7. Juli 2015 10:30 10

2.1 Historie, Konzepte, Einsatzgebiete

33

2

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.

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 entwor-

fene Lizenz für Open-Source-Software, die wesentlich weniger restriktiv ist als bei-

spielsweise die GNU General Public License. So erlaubt es die PSF-Lizenz, den Python-

Interpreter lizenzkostenfrei in Anwendungen einzubetten und mit diesen auszulie-

fern, 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 Pro-

grammiersprache für kleine und große Applikationen, als serverseitige Program-

miersprache 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

Hardware

Betriebssystem

Python-Interpreter

C-ProgrammPython API

Das Python-Programm wird vom Interpreter ausgeführt.

Dabei wird eine umfangreiche Standardbibliothek zur Verfügung gestellt, die das Programm verwenden kann.

Python kann über die Python API durch C-Programme erweitert oder von diesen verwendet werden.

Der Interpreter abstrahiert vom Betriebssystem und der Hardware.

Standardbibliothek

Python-Programm

3633.book Seite 33 Dienstag, 7. Juli 2015 10:30 10

Page 4: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

2 Die Programmiersprache Python

34

Standardbibliothek, mit kleinen Programmen bereits sehr komplexe Probleme anzu-

gehen. 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 Proto-

typ 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 angespro-

chene 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-Program-

men 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 Computerspie-

len (Civilization IV, Battlefield 2, Eve Online).

Viele Anwendungen unterstützen Python als Skriptsprache für Erweiterungen. Bei-

spiele 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, ver-

breitete 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-Web-

site unter http://www.python.org als Installationsdatei für Ihr Betriebssystem herun-

terladen 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-

3633.book Seite 34 Dienstag, 7. Juli 2015 10:30 10

2.2 Die Verwendung von Python

35

2

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 rudi-

mentäre Python-Entwicklungsumgebung mit grafischer Benutzeroberfläche. Beim

Starten von IDLE wird zunächst nur ein Fenster geöffnet, das eine Python-Shell bein-

haltet. Zudem kann über den Menüpunkt File • New Window eine neue Python-

Programmdatei erstellt und editiert werden. Nachdem die Programmdatei gespei-

chert 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 ei-

nige Komfortfunktionen wie beispielsweise das farbige Hervorheben von Code-Ele-

menten (»Syntax Highlighting«) oder eine automatische Code-Vervollständigung.

Abbildung 2.3 Die Entwicklungsumgebung IDLE

Wenn Sie mit IDLE nicht zufrieden sind, finden Sie eine Übersicht über die verbrei-

tetsten Python-Entwicklungsumgebungen im Anhang dieses Buches. Zudem erhal-

ten Sie auf der offiziellen Python-Website unter http://wiki.python.org/moin/

PythonEditors eine umfassende Auflistung von Entwicklungsumgebungen und Edi-

toren für Python.

3633.book Seite 35 Dienstag, 7. Juli 2015 10:30 10

Page 5: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

2 Die Programmiersprache Python

36

Die folgenden Abschnitte geben Ihnen eine kurze Einführung dazu, wie Sie den inter-

aktiven 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 beigeleg-

ten 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, beispiels-

weise 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 beigeleg-

ten CD-ROM.

Nach der Installation von Python starten Sie den interaktiven Modus und IDLE, ähn-

lich wie bei Linux, aus einer Terminal-Sitzung heraus mit den Befehlen python3 bzw.

idle.

3633.book Seite 36 Dienstag, 7. Juli 2015 10:30 10

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.

3633.book Seite 37 Dienstag, 7. Juli 2015 10:30 10

Page 6: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

39

3

Kapitel 3

Erste Schritte im interaktiven Modus

Startet man den Python-Interpreter ohne Argumente, gelangt man in den sogenann-

ten interaktiven Modus. Dieser Modus bietet dem Programmierer die Möglichkeit,

Kommandos direkt an den Interpreter zu senden, ohne zuvor ein Programm erstel-

len zu müssen. Der interaktive Modus wird häufig genutzt, um schnell etwas auszu-

probieren 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 Ver-

stä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 linuxType "help", "copyright", "credits" or "license" for more information.>>>

Nach der Eingabeaufforderung (>>>) kann beliebiger Python-Code eingegeben wer-

den. Bei Zeilen, die nicht mit >>> beginnen, handelt es sich um Ausgaben des Inter-

preters.

Zur Bedienung des interaktiven Modus sei noch gesagt, dass er über eine History-

Funktion 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 be-

schrä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.

3633.book Seite 39 Dienstag, 7. Juli 2015 10:30 10

Page 7: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

3 Erste Schritte im interaktiven Modus

40

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>>> 11391139>>> +1212

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 Vorzei-

chen 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 + 914>>> 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 + 6168>>> 21 - 3 * 9 + 60

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/21.5>>> 2/30.6666666666666666>>> 4/41.0

3633.book Seite 40 Dienstag, 7. Juli 2015 10:30 10

3.2 Gleitkommazahlen

41

3

Hinweis

Diese Eigenschaft unterscheidet Python von vielen anderen Programmiersprachen.

Dort wird bei der Division zweier ganzer Zahlen eine ganzzahlige Division durchge-

führt und das Ergebnis ebenfalls als ganze Zahl zurückgegeben. Diese sogenannte

Integer-Division1 wurde in Python-Versionen vor 3.0 auch angewendet.

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.50.5>>> -123.456-123.456>>> +1.3371.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.10.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//21>>> 2//30

3633.book Seite 41 Dienstag, 7. Juli 2015 10:30 10

Page 8: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

3 Erste Schritte im interaktiven Modus

42

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 ins-

besondere selbst wieder Listen sein, wie folgendes Beispiel zeigt:

>>> ["Python", 1, 2, -7 / 4, [1,2,3]]['Python', 1, 2, -1.75, [1, 2, 3]]

3633.book Seite 42 Dienstag, 7. Juli 2015 10:30 10

3.5 Dictionarys

43

3

Ä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.5 Dictionarys

Der fünfte und letzte Datentyp, den Sie an dieser Stelle kennenlernen, ist das Dictio-

nary (dt. Wörterbuch). Ein Dictionary speichert Zuordnungen von Schlüsseln zu Wer-

ten. Um ein Dictionary zu erzeugen, werden die Schlüssel/Wert-Paare durch

Kommata getrennt in geschweifte Klammern geschrieben. Zwischen einem Schlüs-

sel 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üs-

sel/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 Darstel-

lung 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.

3633.book Seite 43 Dienstag, 7. Juli 2015 10:30 10

Page 9: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

3 Erste Schritte im interaktiven Modus

44

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 ge-

nannt.

>>> 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 Berech-

nungen verwendet werden, indem der Name anstelle des jeweiligen Wertes eingege-

ben wird:

>>> name0.5>>> 2 * name1.0>>> (var123 + var123) / 38>>> var123 + name12.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-

3633.book Seite 44 Dienstag, 7. Juli 2015 10:30 10

3.6 Variablen

45

3

den.2 Beachten Sie, dass auch Umlaute und spezielle Buchstaben anderer Sprachen

erlaubt sind, wie folgendes Beispiel zeigt:

>>> äöüßéè = 123>>> äöüßéè123

Solche Freiheiten, was Bezeichner angeht, finden sich in anderen Programmierspra-

chen selten. Nicht zuletzt deshalb empfehlen wir Ihnen, sich auf das englische Alpha-

bet zu beschränken. Die fehlenden Umlaute und das ß fallen auch bei deutschen

Bezeichnern kaum ins Gewicht und wirken im Quellcode eher verwirrend als na-

türlich.

Bestimmte Schlüsselwörter 3 sind in Python für die Sprache selbst reserviert und dür-

fen nicht als Bezeichner verwendet werden. Die folgende Tabelle gibt Ihnen eine

Übersicht über alle in Python reservierten Wörter.

Zum Schluss möchten wir noch einen weiteren Begriff einführen: Alles, was mit

numerischen Literalen – also Ganz- oder Gleitkommazahlen, Variablen und Operato-

ren – formuliert werden kann, wird als arithmetischer Ausdruck bezeichnet. Ein sol-

cher Ausdruck kann also so aussehen:

(a * a + b) / 12

Alle bisher eingeführten Operatoren +, -, * und / werden daher als arithmetische Ope-

ratoren bezeichnet.

2 Häufig werden Variablen, die nur eine lokale und kurzfristige Bedeutung haben, mit einem kur-

zen, 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 Variablenna-

men 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.

andasassertbreakclasscontinuedef

delelifelseexceptFalsefinallyfor

fromglobalifimportinislambda

Nonenonlocalnotorpassraisereturn

Truetrywhilewithyield

Tabelle 3.1 Schlüsselwörter in Python

3633.book Seite 45 Dienstag, 7. Juli 2015 10:30 10

Page 10: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

3 Erste Schritte im interaktiven Modus

46

3.7 Logische Ausdrücke

Neben den arithmetischen Operatoren gibt es einen zweiten Satz von Operatoren,

die das Vergleichen von Zahlen ermöglichen:

>>> 3 < 4True

Hier wird getestet, ob 3 kleiner ist als 4. Auf solche Vergleiche antwortet der Interpre-

ter 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:

Allgemein kann für 3 und 4 ein beliebiger arithmetischer Ausdruck eingesetzt wer-

den. Wenn zwei arithmetische Ausdrücke durch einen der oben genannten Operato-

ren 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.

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

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

3633.book Seite 46 Dienstag, 7. Juli 2015 10:30 10

3.8 Funktionen und Methoden

47

3

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. Selbstver-

ständlich ergibt ein solcher Vergleich nur dann einen Sinn, wenn komplexere arith-

metische 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 über-

flü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«.

3.8 Funktionen und Methoden

In diesem Abschnitt vermitteln wir Ihnen ein grundlegendes Wissen über Funktio-

nen und einige Konzepte der objektorientierten Programmierung. Dabei beschrän-

3633.book Seite 47 Dienstag, 7. Juli 2015 10:30 10

Page 11: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

3 Erste Schritte im interaktiven Modus

48

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, Redun-

danz 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 Wart-

barkeit des Quellcodes deutlich erhöhen.

Python bietet einen Satz eingebauter Funktionen (Built-in Functions), die der Pro-

grammierer 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 ge-

trennt 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

3633.book Seite 48 Dienstag, 7. Juli 2015 10:30 10

3.9 Bildschirmausgaben

49

3

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 Opera-

tionen, die auf diesen Daten durchgeführt werden können. Ein Teil dieser Operatio-

nen 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, geschrie-

ben. Dieser ist wie ein Funktionsaufruf aufgebaut:

>>> liste = [2,7,3,2,7,8,4,2,5]>>> liste.sort()>>> liste[2, 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 Bildschirm-

ausgaben dagegen vom Programmierer erzeugt werden. Um den Wert einer Varia-

blen auszugeben, wird in Python die Funktion print verwendet:

3633.book Seite 49 Dienstag, 7. Juli 2015 10:30 10

Page 12: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

3 Erste Schritte im interaktiven Modus

50

>>> 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 automa-

tischen 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

Auch hier ist es problemlos möglich, anstelle eines konstanten Wertes einen Varia-

blennamen 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.

3633.book Seite 50 Dienstag, 7. Juli 2015 10:30 10

3.9 Bildschirmausgaben

51

3

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:

>>> print "Dies", "ist", "Python", 2Dies 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.

3633.book Seite 51 Dienstag, 7. Juli 2015 10:30 10

Page 13: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

53

4

Kapitel 4

Der Weg zum ersten Programm

Nachdem wir im interaktiven Modus spielerisch einige Grundelemente der Sprache

Python behandelt haben, möchten wir dieses Wissen jetzt auf ein tatsächliches Pro-

gramm ü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 Inter-

preter eingelesen und ausgeführt.

In den folgenden Abschnitten lernen Sie die Grundstrukturen eines Python-Pro-

gramms 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 Konso-

lenanwendungen schreiben werden. Eine Konsolenanwendung hat eine rein textba-

sierte 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 Anwendungs-

fälle reicht eine solche textbasierte Schnittstelle aus.1

Grundsätzlich besteht ein Python-Programm aus einer oder mehreren Programm-

dateien. Diese Programmdateien haben die Dateiendung .py und enthalten den

Python-Quelltext. Dabei handelt es sich um nichts anderes als um Textdateien. Pro-

grammdateien 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 ver-

wenden, der keine vergleichbare Funktion unterstützt, müssen Sie in einer Kom-

mandozeile 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.

3633.book Seite 53 Dienstag, 7. Juli 2015 10:30 10

Page 14: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

4 Der Weg zum ersten Programm

54

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 Programm-

datei programm.py im Ordner C:\Ordner ausgeführt. Dazu müssen Sie ein Konsolen-

fenster unter Start • Programme • Zubehör • Eingabeaufforderung starten.

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-Pro-

gramm 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.

Linux und OS X

Unter Unix-ähnlichen Betriebssystemen wie Linux oder OS X wechseln Sie ebenfalls

in das Verzeichnis, in dem die Programmdatei liegt, und starten dann den Python-

Interpreter mit dem Kommando python, gefolgt von dem Namen der auszuführen-

den Programmdatei. Im folgenden Beispiel wird die Programmdatei programm.py

unter Linux ausgeführt, die sich im Verzeichnis /home/user/ordner befindet:

user@HOST ~ $ cd ordneruser@HOST ~/ordner $ python programm.pyDies schreibt Ihnen Ihr Python-Programm

3633.book Seite 54 Dienstag, 7. Juli 2015 10:30 10

4.1 Tippen, kompilieren, testen

55

4

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.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.

Beachten Sie, dass der Python-Interpreter auf Ihrem System in einem anderen Ver-

zeichnis als dem hier angegebenen installiert sein könnte. Allgemein ist daher

folgende Shebang-Zeile besser, da sie vom tatsächlichen Installationsort Pythons un-

abhä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.

4.1.2 Interne Abläufe

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 Python-

Programmdatei ablaufen. Abbildung 4.2 veranschaulicht, was beim Ausführen einer

Programmdatei namens programm.py geschieht.

3633.book Seite 55 Dienstag, 7. Juli 2015 10:30 10

Page 15: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

4 Der Weg zum ersten Programm

56

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 Pro-

gramm 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 behal-

ten oder als programm.pyc auf der Festplatte zu speichern.

Beachten Sie, dass der vom Compiler generierte Byte-Code, im Gegensatz etwa zu C-

oder 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

Compiler

Programmdateiprogramm.py

Byte-Codeprogramm.pyc

Interpreter

3633.book Seite 56 Dienstag, 7. Juli 2015 10:30 10

4.2 Grundstruktur eines Python-Programms

57

4

ausgeführt werden, für die ein Python-Interpreter existiert. Allerdings laufen Pro-

gramme 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.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 ver-

stehen. Die Syntax wird durch eine Grammatik festgelegt, an die sich der Program-

mierer 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 ein-

fachsten Fall genau eine Zeile im Quelltext einnehmen. Folgende Anweisung gibt bei-

spielsweise einen Text auf dem Bildschirm aus:

print("Hallo Welt")

Einige Anweisungen lassen sich in einen Anweisungskopf und einen Anweisungskör-

per unterteilen, wobei der Körper weitere Anweisungen enthalten kann:

Abbildung 4.3 Struktur einer mehrzeiligen Anweisung

2 Zumindest dann, wenn der Interpreter keine Laufzeitoptimierung über eine Just-in-Time-Kom-

pilierung durchführt. Mit PyPy lernen Sie einen solchen Python Interpreter in Abschnitt 35.6.9,

»Alternative Interpreter: PyPy«, kennen.

Anweisungskopf:Anweisung

Anweisung

3633.book Seite 57 Dienstag, 7. Juli 2015 10:30 10

Page 16: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

4 Der Weg zum ersten Programm

58

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 Anweisungs-

körpers festgelegt. Die Einrückung kann sowohl über Tabulatoren als auch über Leer-

zeichen 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 einge-

rü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 aus-

schließ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 ArbeitZweite Zeile!>>>

3633.book Seite 58 Dienstag, 7. Juli 2015 10:30 10

4.2 Grundstruktur eines Python-Programms

59

4

Beachten Sie, dass Sie, auch wenn eine Zeile mit ... beginnt, die aktuelle Ein-

rü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 interakti-

ven Modus durch Drücken der (¢)-Taste beendet werden.

4.2.1 Umbrechen langer Zeilen

Prinzipiell können Quellcodezeilen beliebig lang werden. Viele Programmierer be-

schrä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 maxi-

male 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 syntak-

tischen Regeln von Python gebunden. Durch Einsatz der Backslash-Notation ist es

möglich, Quellcode an nahezu beliebigen Stellen in eine neue Zeile umzubrechen:

>>> var \... = \... 10>>> var10

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 Zei-

len umbrechen, können Sie mehrere einzeilige Anweisungen in einer Zeile zusam-

menfassen. Dazu werden die Anweisungen durch ein Semikolon voneinander ge-

trennt:

3633.book Seite 59 Dienstag, 7. Juli 2015 10:30 10

Page 17: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

4 Der Weg zum ersten Programm

60

>>> print("Hallo"); print("Welt")HalloWelt

Anweisungen, die aus einem Anweisungskopf und einem Anweisungskörper beste-

hen, 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

Sollte der Anweisungskörper mehrere Zeilen lang sein, können diese durch ein Semi-

kolon zusammengefasst werden:

>>> x = True>>> if x: print("Hallo"); print("Welt")...HalloWelt

Alle durch ein Semikolon zusammengefügten Anweisungen werden so behandelt,

als wären sie gleich weit eingerückt. Allein ein Doppelpunkt vergrößert die Ein-

rückungstiefe. Aus diesem Grund gibt es im oben genannten Beispiel keine Möglich-

keit, in derselben Zeile eine Anweisung zu schreiben, die nicht mehr im Körper der

if-Anweisung steht.

Hinweis

Beim Einsatz des Backslashs und vor allem des Semikolons entsteht schnell unleserli-

cher 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 Beispiel-

programm, das Spiel Zahlenraten. Die Spielidee ist folgende: Der Spieler soll eine im

Programm festgelegte Zahl erraten. Dazu stehen ihm beliebig viele Versuche zur Ver-

fü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 erra-

ten hat, gibt das Programm die Anzahl der Versuche aus und wird beendet.

3633.book Seite 60 Dienstag, 7. Juli 2015 10:30 10

4.3 Das erste Programm

61

4

Aus Sicht des Spielers soll das Ganze folgendermaßen aussehen:

Raten Sie: 42Zu kleinRaten Sie: 10000Zu großRaten Sie: 999Zu kleinRaten Sie: 1337Super, Sie haben es in 4 Versuchen geschafft!

Kommen wir vom Ablaufprotokoll zur konkreten Implementierung in Python:

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, Ganz-

oder Fließkommazahlen. Der Typ einer Variablen wird zur Laufzeit des Programms

anhand des ihr zugewiesenen Wertes bestimmt. Es ist also nicht nötig, einen Daten-

typ explizit anzugeben. Eine Variable kann im Laufe des Programms ihren Typ

ändern.

geheimnis = 1337versuch = 0zaehler = 0

while versuch != geheimnis:versuch = int(input("Raten Sie: "))

if versuch < geheimnis:print("Zu klein")

if versuch > geheimnis:print("Zu groß")

zaehler = zaehler + 1

print("Super, Sie haben es in ", zaehler, "Versuchen geschafft!")

Initialisierung: Hier werden Variablen angelegt und mit Werten versehen.

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 printkönnen Zeichenketten ausgegeben werden.

3633.book Seite 61 Dienstag, 7. Juli 2015 10:30 10

Page 18: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

4 Der Weg zum ersten Programm

62

In unserem Spiel werden Variablen für die gesuchte Zahl (geheimnis), die Benut-

zereingabe (versuch) und den Versuchszähler (zaehler) angelegt und mit Anfangs-

werten 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 Benutzer-

sicht 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 Ein-

rückung wieder um einen Schritt nach links geht, endet der Schleifenkörper.

Schleifenkörper

In der ersten Zeile des Schleifenkörpers wird eine vom Spieler eingegebene Zahl ein-

gelesen 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 aufzufor-

dern.

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.

Nach dem Hochzählen des Versuchszählers endet der Schleifenkörper, da die nächste

Zeile nicht mehr unter dem Schleifenkopf eingerückt ist.

Bildschirmausgabe

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.

3633.book Seite 62 Dienstag, 7. Juli 2015 10:30 10

4.5 Der Fehlerfall

63

4

4.4 Kommentare

Sie können sich sicherlich vorstellen, dass es nicht das Ziel ist, Programme zu schrei-

ben, die auf eine Postkarte passen würden. Mit der Zeit wird der Quelltext Ihrer Pro-

gramme 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äu-

tert 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 Kommentarenprint("Hallo Welt!") # Simple Hallo-Welt-Ausgabe

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

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 Inter-

preters gestoßen:

File "spiel.py", line 8if guess < secret

^SyntaxError: invalid syntax

3 Eigentlich wird mit dieser Notation kein Blockkommentar erzeugt, sondern ein mehrzeiliger

String, der sich aber auch dazu eignet, größere Quellcodebereiche »auszukommentieren«.

3633.book Seite 63 Dienstag, 7. Juli 2015 10:30 10

Page 19: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

4 Der Weg zum ersten Programm

64

Es handelt sich dabei um eine Fehlermeldung, die in diesem Fall auf einen Syntaxfeh-

ler im Programm hinweist. Können Sie erkennen, welcher Fehler hier vorliegt? Rich-

tig, 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 Python-

Anfängern häufig auftritt. Versuchen Sie dazu einmal, folgendes Programm auszu-

führen:

i = 10if 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 Anwei-

sungskörper. Das ist nicht zulässig, und es tritt ein IndentationError auf:

File "indent.py", line 3print("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.

3633.book Seite 64 Dienstag, 7. Juli 2015 10:30 10

Page 20: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

261

19

Kapitel 19

Funktionen

Aus der Mathematik kennen Sie den Begriff der Funktion, mit dem eine Zuordnungs-

vorschrift bezeichnet wird. Die Funktion f(x) = x2 ordnet beispielsweise dem Parame-

ter 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 wie-

der. Wir haben beispielsweise bereits die eingebaute Funktion len besprochen, die

die Länge eines iterierbaren Objekts berechnet. Dazu bekommt sie das entspre-

chende Objekt als Parameter übergeben und gibt das Ergebnis in Form eines Rück-

gabewertes 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 Funktions-

namen, einer Liste von Funktionsparametern und einem Code-Block, dem Funk-

tionskö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 Unter-

programme aufzuteilen. Das erhöht die Les- und Wartbarkeit des Codes.

Im Folgenden erläutern wir die Handhabung einer bestehenden Funktion am Bei-

spiel 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 Pro-

zedur unterschieden. Unter einer Prozedur versteht man eine Funktion, die keinen Rückgabe-

wert hat.

3633.book Seite 261 Dienstag, 7. Juli 2015 10:30 10

Page 21: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

262

nen, Methoden und Attribute«, wir möchten es an dieser Stelle trotzdem noch

einmal wiederholen.

Die eingebaute Funktion range wurde in Abschnitt 5.2.6, »Die for-Schleife als Zähl-

schleife«, eingeführt und erzeugt ein iterierbares Objekt über eine begrenzte Anzahl

fortlaufender ganzer Zahlen:

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 Para-

meter 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 die-

sem 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)...02468

Es ist auch möglich, das Ergebnis des range-Aufrufs mit list in eine Liste zu über-

führen:

>>> liste = list(ergebnis)>>> liste[0, 2, 4, 6, 8]>>> liste[3]6

So viel vorerst zur Verwendung vordefinierter Funktionen. Python erlaubt es Ihnen,

eigene Funktionen zu schreiben, die Sie nach demselben Schema verwenden kön-

3633.book Seite 262 Dienstag, 7. Juli 2015 10:30 10

19.1 Schreiben einer Funktion

263

19

nen, wie es hier beschrieben wurde. Im nächsten Abschnitt werden wir uns damit

befassen, wie Sie eine eigene Funktion erstellen.

19.1 Schreiben einer Funktion

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. Syn-

taktisch sieht die Definition folgendermaßen aus:

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 Funk-

tionskörper. Bei dem Funktionskörper handelt es sich um einen beliebigen Code-

Block, 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 Fakul-

tä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 enthal-

ten sind.

def Funktionsname(parameter_1, …, parameter_n):Anweisung

Anweisung

3633.book Seite 263 Dienstag, 7. Juli 2015 10:30 10

Page 22: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

264

def fak(zahl):ergebnis = 1for i in range(2, zahl+1):

ergebnis *= iprint(ergebnis)

Anhand dieses Beispiels können Sie gut nachvollziehen, wie der Parameter zahl im

Funktionskörper verarbeitet wird. Nachdem die Berechnung erfolgt ist, wird ergeb-

nis mittels print ausgegeben. Die Referenz zahl ist nur innerhalb des Funktionskör-

pers 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 = 1for i in range(2, zahl+1):

ergebnis *= iprint(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 Hauptpro-

gramm 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 Berech-

nung tatsächlich durchführt. Das Ziel dieses Ansatzes ist es vor allem, dass die Funk-

tion 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 Ergeb-

nis an das Hauptprogramm zurückgeben, sodass die Ausgabe dort erfolgen kann.

3633.book Seite 264 Dienstag, 7. Juli 2015 10:30 10

19.1 Schreiben einer Funktion

265

19

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 = 1for i in range(2, zahl+1):

ergebnis *= ireturn 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 überge-

benen Parameter um eine negative Zahl handelt. Ist das der Fall, wird die Abhandlung

der Funktion abgebrochen:

def fak(zahl):if zahl < 0:

return Noneergebnis = 1for i in range(2, zahl+1):

ergebnis *= ireturn ergebnis

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 Funk-

tionslogik und nicht bloß ein Nebenprodukt des Funktionsabbruchs.

3633.book Seite 265 Dienstag, 7. Juli 2015 10:30 10

Page 23: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

266

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 Kon-

text diese Fakultät benötigt wird.

Selbstverständlich können Sie in Ihrem Quelltext mehrere eigene Funktionen defi-

nieren 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 -zahlelse:

return zahl

def fak(zahl):ergebnis = 1for i in range(2, zahl+1):

ergebnis *= ireturn 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 Func-

tion 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.

3633.book Seite 266 Dienstag, 7. Juli 2015 10:30 10

19.2 Funktionsparameter

267

19

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 Wahr-

heit. 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 Funktions-

aufruf nicht explizit angegeben werden, fließen sie nicht in die Addition ein. Die

Funktion kann folgendermaßen aufgerufen werden:

3633.book Seite 267 Dienstag, 7. Juli 2015 10:30 10

Page 24: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

268

>>> 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 Parame-

ter eindeutig zugeordnet werden können.

19.2.2 Schlüsselwortparameter

Neben den bislang verwendeten sogenannten Positional Arguments (Positionspara-

meter) gibt es in Python eine weitere Möglichkeit, Parameter zu übergeben. Solche

Parameter werden Keyword Arguments (Schlüsselwortparameter) genannt. Es han-

delt sich dabei um eine alternative Technik, Parameter beim Funktionsaufruf zu

übergeben. An der Funktionsdefinition ändert sich nichts. Betrachten wir dazu un-

sere 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 ange-

geben werden muss, ist die Zuordnung unter allen Umständen eindeutig. Das erlaubt

es dem Programmierer, Schlüsselwortparameter in beliebiger Reihenfolge anzu-

geben.

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.

summe(1, 2, c=10, d=11)

Beachten Sie außerdem, dass nur solche Parameter als Keyword Arguments überge-

ben werden dürfen, die im selben Funktionsaufruf nicht bereits als Positional Argu-

ments übergeben wurden.

3633.book Seite 268 Dienstag, 7. Juli 2015 10:30 10

19.2 Funktionsparameter

269

19

19.2.3 Beliebige Anzahl von Parametern

Rufen Sie sich noch einmal die Verwendung der eingebauten Funktion print in Erin-

nerung:

>>> print("P")P>>> print("P", "y", "t", "h", "o", "n")P y t h o n>>> print("P", "y", "t", "h", "o", "n", " ", "i", "s", "t", " ",... "s", "u", "p", "e", "r")P y t h o n i s t s u p e r

Offensichtlich ist es möglich, der Funktion print eine beliebige Anzahl von Parame-

tern zu übergeben. Diese Eigenschaft ist nicht exklusiv für die print-Funktion, son-

dern 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 entgegenzuneh-

men. 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:

Feste Parameter: 1 2Weitere Parameter: ()

Der Parameter weitere referenziert also ein leeres Tupel. Im Falle des zweiten Aufrufs

sieht die Ausgabe folgendermaßen aus:

3633.book Seite 269 Dienstag, 7. Juli 2015 10:30 10

Page 25: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

270

Feste Parameter: 1 2Weitere Parameter: ('Hallo Welt', 42, [1, 2, 3, 4])

Der Parameter weitere referenziert nun ein Tupel, in dem alle über a und b hinausge-

henden Instanzen in der Reihenfolge enthalten sind, in der sie übergeben wurden.

An dieser Stelle möchten wir die im vorangegangenen Beispiel definierte Funktion

summe dahingehend erweitern, dass sie die Summe einer vom Benutzer festgelegten

Zahl von Parametern berechnen kann:

def summe(*parameter):s = 0for p in parameter:

s += preturn 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ög-

lichen, funktioniert ebenso für Keyword Arguments. Der Unterschied besteht darin,

dass der Parameter, der alle weiteren Instanzen enthalten soll, in der Funktionsdefi-

nition mit zwei Sternen geschrieben werden muss. Außerdem referenziert er später

kein Tupel, sondern ein Dictionary. Dieses Dictionary enthält den jeweiligen Parame-

ternamen als Schlüssel und die übergebene Instanz als Wert. Betrachten Sie dazu fol-

gende 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 2Weitere Parameter: {}

3633.book Seite 270 Dienstag, 7. Juli 2015 10:30 10

19.2 Funktionsparameter

271

19

Der Parameter weitere referenziert also ein leeres Dictionary. Nach dem zweiten Auf-

ruf sieht die Ausgabe so aus:

Feste Parameter: 1 2Weitere Parameter: {'johannes': 'ernesti', 'peter': 'kaiser'}

Beide Techniken können zusammen verwendet werden, wie folgende Funktionsdefi-

nition zeigt:

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üssel-

wortparametern ü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 Positionsparame-

tern a und b, der Möglichkeit für weitere Positionsparameter *c und den beiden rei-

nen 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

3633.book Seite 271 Dienstag, 7. Juli 2015 10:30 10

Page 26: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

272

>>> 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 wer-

den, sofern sie nicht mit einem Default-Wert belegt sind:

>>> 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

Wenn zusätzlich die Übergabe beliebig vieler Schlüsselwortparameter ermöglicht

werden soll, folgt die dazu notwendige **-Notation nach den reinen Schlüsselwort-

parametern am Ende der Funktionsdefinition:

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üsselwort-

parameter 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 Ab-

schnitt 19.2.3, »Beliebige Anzahl von Parametern«, definierten erweiterten Version

der summe-Funktion die Summe aller Einträge eines Tupels bestimmen. Dazu ist mo-

mentan 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

3633.book Seite 272 Dienstag, 7. Juli 2015 10:30 10

19.2 Funktionsparameter

273

19

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ün-

schenswert ist ein Weg, eine in einem iterierbaren Objekt gespeicherte Liste von

Argumenten direkt einer Funktion übergeben zu können. Dieser Vorgang wird Ent-

packen genannt.

Das Entpacken eines iterierbaren Objekts geschieht dadurch, dass der Funktion das

Objekt mit einem vorangestellten Sternchen (*) übergeben wird. Im folgenden Bei-

spiel wird das von der eingebauten Funktion range erzeugte iterierbare Objekt ver-

wendet, um mithilfe der Funktion summe die Summe der ersten 100 natürlichen

Zahlen zu berechnen:4

>>> summe(*range(101))5050

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 be-

stimmt, 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 Unter-

schied 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 gan-

zen Zahlen von 0 bis einschließlich n–1. Daher muss im Beispiel 101 anstelle von 100 übergeben

werden.

3633.book Seite 273 Dienstag, 7. Juli 2015 10:30 10

Page 27: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

274

>>> d = {"a" : 7, "b" : 3, "c" : 4}>>> summe(**d)14

Abschließend ist noch zu erwähnen, dass die Techniken zum Entpacken von Parame-

terlisten 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 Hin-

terkopf behalten, dass sogenannte Seiteneffekte (engl. side effects) immer dann auf-

treten 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 überge-

benen 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)134537016134537004

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

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. Letz-

tere Variante ist frei von Seiteneffekten, aber aufgrund des Kopierens langsamer.

3633.book Seite 274 Dienstag, 7. Juli 2015 10:30 10

19.2 Funktionsparameter

275

19

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 ange-

legte Funktion f auf. Sie sehen, dass die ausgegebenen Identitäten gleich sind. Es han-

delt 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 Unter-

schied, ob die referenzierten Objekte Instanzen eines veränderlichen oder unverän-

derlichen 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 Funkti-

onskörper um eins erhöhen, werden nachher a und p verschiedene Instanzen refe-

renzieren. 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 Dictiona-

rys, nicht geben. Dazu folgendes Beispiel:

def f(liste):liste[0] = 42liste += [5,6,7,8,9]

zahlen = [1,2,3,4]

print(zahlen)f(zahlen)print(zahlen)

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 ausgege-

ben. Die Ausgabe des Beispiels sieht folgendermaßen aus:

[1, 2, 3, 4][42, 2, 3, 4, 5, 6, 7, 8, 9]

Es ist zu erkennen, dass sich die Änderungen nicht allein auf den Kontext der Funk-

tion beschränken, sondern sich auch im Hauptprogramm auswirken. Dieses Phäno-

men wird Seiteneffekt genannt. Wenn eine Funktion nicht nur lesend auf eine Instanz

eines veränderlichen Datentyps zugreifen muss und Seiteneffekte nicht ausdrück-

lich erwünscht sind, sollten Sie innerhalb der Funktion oder bei der Parameterüber-

6 Beachten Sie, dass dies nicht für unveränderliche Instanzen gilt, die veränderliche Instanzen ent-

halten. So können bei der Parameterübergabe eines Tupels, das eine Liste enthält, durchaus Sei-

teneffekte auftreten.

3633.book Seite 275 Dienstag, 7. Juli 2015 10:30 10

Page 28: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

276

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 Default-

Wert eines Parameters verwendet wird:

>>> def f(a=[1,2,3]):... a += [4,5]... print(a)...>>> f()[1, 2, 3, 4, 5]>>> f()[1, 2, 3, 4, 5, 4, 5]>>> f()[1, 2, 3, 4, 5, 4, 5, 4, 5]>>> f()[1, 2, 3, 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 Funk-

tion 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 ver-

wenden. 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 ande-

ren immutablen Datentyps verwenden, ohne dass Seiteneffekte auftreten.

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.

3633.book Seite 276 Dienstag, 7. Juli 2015 10:30 10

19.3 Namensräume

277

19

19.3 Namensräume

Bisher wurde ein Funktionskörper als abgekapselter Bereich betrachtet, der aus-

schließlich über Parameter bzw. den Rückgabewert Informationen mit dem Haupt-

programm 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 Kon-

text einer Funktion, also im Funktionskörper, befinden, dann können wir dort selbst-

verstä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 unter-

schieden. 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 = 10f(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 existie-

ren. Abbildung 19.2 fasst das Konzept der Namensräume zusammen.

3633.book Seite 277 Dienstag, 7. Juli 2015 10:30 10

Page 29: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

278

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 glo-

bale 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 statt-

dessen eine entsprechende lokale Referenz erzeugt:

def f():s = "lokaler String"print(s)

s = "globaler String"f()print(s)

Die Ausgabe dieses Beispiels lautet:

lokaler Stringglobaler String

def f( a , b ):c = a + breturn c

def g( a , b ):c = a * breturn c

a = 4b = 7f(47, 11)g(13, 37)

Der lokale Namensraum derFunktion f. Die Referenz c ist lokal und nach außen nicht sichtbar.

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.

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.

3633.book Seite 278 Dienstag, 7. Juli 2015 10:30 10

19.3 Namensräume

279

19

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:

def f():global ss = "lokaler String"print(s)

s = "globaler String"f()print(s)

Die Ausgabe des Beispiels lautet:

lokaler Stringlokaler 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**2return 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 Referen-

zen an die lokale Funktion durchzuschleusen, bedient man sich eines Tricks mit vor-

belegten Funktionsparametern:

def globale_funktion(n):def lokale_funktion(n=n):

3633.book Seite 279 Dienstag, 7. Juli 2015 10:30 10

Page 30: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

280

return n**2return 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 Pa-

rameters ü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ür-

fen 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 Funktionsde-

finitionen 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 überge-

ordneten 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 resres += 1

res = 1funktion2()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 Namens-

raum 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 funk-

tion2 aufgerufen und der Wert von res ausgegeben. Im Beispiel gibt funktion1 den

Wert 2 aus.

3633.book Seite 280 Dienstag, 7. Juli 2015 10:30 10

19.4 Anonyme Funktionen

281

19

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 resres += 1

nonlocal resfunktion3()res += 1

res = 1funktion2()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 Bei-

spiel 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 ange-

gebenen Namen in den Namensraum des nonlocal-Schlüsselworts einbindet.

19.4 Anonyme Funktionen

Beim Sortieren einer Liste mit der Built-in Function sorted kann eine Funktion über-

geben 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 ein-

fach und werden definiert, verwendet und dann vergessen.

Mithilfe des Schlüsselwortes lambda kann stattdessen eine kleine, anonyme Funktion

erstellt werden:

s = lambda x: -x

3633.book Seite 281 Dienstag, 7. Juli 2015 10:30 10

Page 31: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

282

Auf das Schlüsselwort lambda folgen eine Parameterliste und ein Doppelpunkt. Hin-

ter 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 wer-

den: 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 Sortier-

problem:

>>> 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

3633.book Seite 282 Dienstag, 7. Juli 2015 10:30 10

19.5 Annotationen

283

19

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 Parameter-

werten aufgerufen wird – zurückkommt.

Dabei werden die Annotationen über das Attribut __annotations__ in Form eines Dic-

tionarys 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 Funktions-

definition 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 geschrie-

ben zurückzugeben. Das geschieht durch Multiplikation von s und n.

Wir schreiben jetzt eine Funktion call, die dazu in der Lage ist, eine beliebige Funk-

tion, 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

3633.book Seite 283 Dienstag, 7. Juli 2015 10:30 10

Page 32: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

284

Die Funktion call bekommt ein Funktionsobjekt und beliebig viele Schlüsselwortpa-

rameter übergeben. Dann greift sie für jeden übergebenen Schlüsselwortparameter

auf das Annotation-Dictionary des Funktionsobjekts f zu und prüft, ob ein Parame-

ter 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.

Wenn alle Parameter korrekt übergeben wurden, wird das Funktionsobjekt f aufge-

rufen 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ückgabe-

wert der Funktion f von call durchgereicht:

>>> 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.

19.6 Rekursion

Python erlaubt es dem Programmierer, sogenannte rekursive Funktionen zu schrei-

ben. 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) * nelse:

return 1

3633.book Seite 284 Dienstag, 7. Juli 2015 10:30 10

19.7 Eingebaute Funktionen

285

19

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 Über-

blick geben. Sollten Sie das Beispiel nicht auf Anhieb verstehen, seien Sie nicht ent-

mutigt, denn es lässt sich auch ohne Rekursion passabel in Python programmieren.

Trotzdem sollten Sie nicht leichtfertig über die Rekursion hinwegsehen, denn es han-

delt sich dabei um einen interessanten Weg, sehr elegante Programme zu schreiben.8

19.7 Eingebaute Funktionen

Es war im Laufe des Buches schon oft von eingebauten Funktionen oder Built-in Func-

tions 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 objektorientier-

ten Programmierung voraussetzen. Eine vollständige Übersicht über alle in Python

eingebauten Funktionen finden Sie im Anhang dieses Buches (Abschnitt A.2).

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.

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 Aus-

gabe 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

Tabelle 19.1 Built-in Functions, die in diesem Abschnitt besprochen werden

3633.book Seite 285 Dienstag, 7. Juli 2015 10:30 10

Page 33: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

286

bytearray([source,

encoding, errors])Erzeugt eine neue bytearray-Instanz. 19.7.7

bytes([source,

encoding, errors])Erzeugt eine neue bytes-Instanz. 19.7.8

chr(i) Gibt das Zeichen mit dem Unicode-Code-

point i zurück.

19.7.9

complex([real, imag]) Erzeugt eine komplexe Zahl. 19.7.10

dict([arg]) Erzeugt ein Dictionary. 19.7.11

divmod(a, b) Gibt ein Tupel mit dem Ergebnis einer

Ganzzahldivision und dem Rest zurück.

divmod(a, b) ist äquivalent zu

(a // b, a % b)

19.7.12

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

hash(object) Gibt den Hash-Wert der Instanz object

zurück.

19.7.21

help([object]) Startet die eingebaute interaktive Hilfe von

Python.

19.7.22

Built-in Function Beschreibung Abschnitt

Tabelle 19.1 Built-in Functions, die in diesem Abschnitt besprochen werden (Forts.)

3633.book Seite 286 Dienstag, 7. Juli 2015 10:30 10

19.7 Eingebaute Funktionen

287

19

hex(x) Gibt den Hexadezimalwert der ganzen Zahl

x in Form eines Strings zurück.

19.7.23

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

int(x, [base]) Erzeugt eine ganze Zahl. 19.7.26

len(s) Gibt die Länge einer Instanz s zurück. 19.7.27

list([iterable]) Erzeugt eine Liste. 19.7.28

locals() Gibt ein Dictionary zurück, das alle Referen-

zen 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

Built-in Function Beschreibung Abschnitt

Tabelle 19.1 Built-in Functions, die in diesem Abschnitt besprochen werden (Forts.)

3633.book Seite 287 Dienstag, 7. Juli 2015 10:30 10

Page 34: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

288

19.7.1 abs(x)

Die Funktion abs berechnet den Betrag von x. Der Parameter x muss dabei ein nume-

rischer 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

range([start], stop,

[step])Erzeugt einen Iterator über eine Zahlen-

folge 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 iterier-

baren 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

Built-in Function Beschreibung Abschnitt

Tabelle 19.1 Built-in Functions, die in diesem Abschnitt besprochen werden (Forts.)

3633.book Seite 288 Dienstag, 7. Juli 2015 10:30 10

19.7 Eingebaute Funktionen

289

19

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 durch-

laufen. 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

Das übergebene iterierbare Objekt muss nicht zwingend nur bool-Instanzen durch-

laufen. Instanzen anderer Datentypen werden nach den Regeln aus Abschnitt 12.6.2,

»Wahrheitswerte nicht-boolescher Datentypen«, in Wahrheitswerte überführt.

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'"

3633.book Seite 289 Dienstag, 7. Juli 2015 10:30 10

Page 35: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

290

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:

>>> bin(123)'0b1111011'>>> bin(-12)'-0b1100'>>> bin(0)'0b0'

19.7.6 bool([x])

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 Se-

quenz 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 enco-

ding und errors in eine Byte-Folge codiert und dann zur Initialisierung des Byte-

Arrays 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.

3633.book Seite 290 Dienstag, 7. Juli 2015 10:30 10

19.7 Eingebaute Funktionen

291

19

Außerdem kann für source eine beliebige Instanz eines Datentyps übergeben wer-

den, der das sogenannte Buffer-Protokoll unterstützt. Das sind beispielsweise die

Datentypen bytes und bytearray selbst.

>>> 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')

Näheres zum Datentyp bytearray erfahren Sie in Abschnitt 13.4, »Strings – str, bytes,

bytearray«.

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.7.9 chr(i)

Die Funktion chr gibt einen String der Länge 1 zurück, der das Zeichen mit dem Uni-

code-Codepoint i enthält:

>>> chr(65)'A'>>> chr(33)'!'>>> chr(8364)'€'

9 siehe Abschnitt 13.4.4, »Zeichensätze und Sonderzeichen«

3633.book Seite 291 Dienstag, 7. Juli 2015 10:30 10

Page 36: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

292

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 Para-

meter 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 +-Ope-

rator 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 über-

geben 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 entste-

hen, sondern diese weiterhin dieselben Instanzen referenzieren.

>>> dict({"a" : 1, "b" : 2}){'a': 1, 'b': 2}

10 siehe Abschnitt 12.7, »Komplexe Zahlen – complex«

11 siehe Abschnitt 14.1, »Dictionary – dict«

3633.book Seite 292 Dienstag, 7. Juli 2015 10:30 10

19.7 Eingebaute Funktionen

293

19

� 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 ver-

wendet. 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.7.13 enumerate(iterable)

Die Funktion enumerate erzeugt ein iterierbares Objekt, das nicht allein über die Ele-

mente 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)

Angenommen, der oben dargestellte Code wird für eine Liste iterable = [1,2,3,4,5]

ausgeführt, kommt folgende Ausgabe zustande:

3633.book Seite 293 Dienstag, 7. Juli 2015 10:30 10

Page 37: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

294

Der Wert von iterable an 0 ter Stelle ist: 1Der Wert von iterable an 1 ter Stelle ist: 2Der Wert von iterable an 2 ter Stelle ist: 3Der Wert von iterable an 3 ter Stelle ist: 4Der Wert von iterable an 4 ter Stelle ist: 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

Hinweis

Manchmal wird eval dazu verwendet, Benutzereingaben als Python-Code zu inter-

pretieren:

>>> eval(input("Geben Sie Python-Code ein: "))Geben Sie Python-Code ein: 2**416

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])

Die Funktion exec führt einen als String vorliegenden Python-Code aus:

>>> code = """... x = 12... print(x**2)... """

3633.book Seite 294 Dienstag, 7. Juli 2015 10:30 10

19.7 Eingebaute Funktionen

295

19

>>> 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 ange-

geben 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 Para-

meter erwartet und einen booleschen Wert zurückgibt.

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 gan-

zen Zahlen die ungeraden Zahlen herauszufiltern:

>>> filterobj = filter(lambda x: x%2 == 0, range(21))>>> print(list(filterobj))[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

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 übergebe-

nen Wert initialisiert. Mit Ausnahme von complex können Instanzen alle numeri-

schen Datentypen für x übergeben werden.

>>> float()0.0>>> float(5)5.0

12 siehe Abschnitt 12.5, »Gleitkommazahlen – float«

3633.book Seite 295 Dienstag, 7. Juli 2015 10:30 10

Page 38: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

296

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 zu-

rü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än-

derlichen 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.20 globals()

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.

13 siehe Abschnitt 15.1, »Die Datentypen set und frozenset«

3633.book Seite 296 Dienstag, 7. Juli 2015 10:30 10

19.7 Eingebaute Funktionen

297

19

>>> 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 Referen-

zen 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

Beachten Sie den Unterschied zwischen veränderlichen (mutablen) und unveränder-

lichen (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än-

dert 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'

Hinweis

Seit Python 3.3 werden Hash-Werte von str-, bytes- und datetime-Instanzen aus

Sicherheitsgründen randomisiert. Das bedeutet, dass sich Hash-Werte dieser Daten-

typen in zwei verschiedenen Interpreter-Prozessen unterscheiden. Innerhalb dessel-

ben Prozesses ändern sie sich aber nicht.

3633.book Seite 297 Dienstag, 7. Juli 2015 10:30 10

Page 39: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

298

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 identifi-

ziert.

>>> id(1)134537016>>> id(2)134537004

Näheres zu Identitäten erfahren Sie in Abschnitt 7.1.3.

19.7.25 input([prompt])

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.

>>> s = input("Geben Sie einen Text ein: ")Geben Sie einen Text ein: Python ist gut>>> s'Python ist gut'

3633.book Seite 298 Dienstag, 7. Juli 2015 10:30 10

19.7 Eingebaute Funktionen

299

19

Hinweis

Das Verhalten der Built-in Function input wurde mit Python 3.0 verändert. In frühe-

ren Versionen wurde die Eingabe des Benutzers als Python-Code vom Interpreter

ausgeführt und das Ergebnis dieser Ausführung in Form eines Strings zurückgege-

ben. Die »alte« input-Funktion entsprach also folgendem Code:

>>> eval(input("Prompt: "))Prompt: 2+24

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 die-

ser String den gewünschten Wert der Instanz enthält. Durch den optionalen Parame-

ter base kann die Basis des Zahlensystems angegeben werden, in dem die Zahl

geschrieben wurde.

>>> int(5)5>>> int("FF", 16)255>>> int(hex(12), 16)12

19.7.27 len(s)

Die Funktion len gibt die Länge bzw. die Anzahl der Elemente von s zurück. Für s kön-

nen Sequenzen, Mappings oder Mengen übergeben werden.

>>> len("Hallo Welt")10>>> len([1,2,3,4,5])5

14 siehe Abschnitt 12.4, »Ganzzahlen – int«

3633.book Seite 299 Dienstag, 7. Juli 2015 10:30 10

Page 40: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

300

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 wegge-

lassen 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 deut-

lich werden:

def f(a, b, c):d = a + b + cprint(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.

{'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-

15 siehe Abschnitt 13.2, »Listen – list«

3633.book Seite 300 Dienstag, 7. Juli 2015 10:30 10

19.7 Eingebaute Funktionen

301

19

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 iterier-

bares Objekt zurück, das die jeweiligen Rückgabewerte von function durchläuft. Soll-

ten mehrere iterierbare Objekte übergeben werden, werden function die jeweils n-

ten 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 über-

geben.

>>> f = lambda x: x**2>>> ergebnis = map(f, [1,2,3,4])>>> list(ergebnis)[1, 4, 9, 16]

Hier wird map dazu verwendet, eine Liste mit den Quadraten der Elemente einer zwei-

ten Liste zu erzeugen.

>>> f = lambda x, y: x+y>>> ergebnis = map(f, [1,2,3,4], [1,2,3,4])>>> list(ergebnis)[2, 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.

Abbildung 19.3 Arbeitsweise der Built-in Function map

1

2

3

4

1

2

3

4

2

4

6

8

f

f

f

f

3633.book Seite 301 Dienstag, 7. Juli 2015 10:30 10

Page 41: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

302

In beiden Beispielen wurden Listen verwendet, die ausschließlich numerische Ele-

mente enthielten. Das muss nicht unbedingt sein. Welche Elemente ein an map über-

gebenes 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 Funktions-

objekt übergeben werden. Das Maximum wird dann durch das Vergleichen der Rück-

gabewerte 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.

3633.book Seite 302 Dienstag, 7. Juli 2015 10:30 10

19.7 Eingebaute Funktionen

303

19

Ü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 Oktal-

schreibweise 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

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 un-

ter Verwendung des Parameters z performanter als die Ausdrücke pow(x, y) % z bzw.

x ** y % z.

>>> 7 ** 5 % 43>>> pow(7, 5, 4)3

3633.book Seite 303 Dienstag, 7. Juli 2015 10:30 10

Page 42: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

304

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 Schrei-

ben 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 Nummerie-

rung beginnt also bei 0 und endet einen Schritt, bevor stop erreicht würde.

3633.book Seite 304 Dienstag, 7. Juli 2015 10:30 10

19.7 Eingebaute Funktionen

305

19

Bei dem von range zurückgegebenen iterierbaren Objekt handelt es sich um ein soge-

nanntes range-Objekt. Dies wird bei der Ausgabe im interaktiven Modus folgender-

maß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:

>>> list(range(10))[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> list(range(5, 10))[5, 6, 7, 8, 9]>>> list(range(2, 10, 2))[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-Ver-

sionen.

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]))

3633.book Seite 305 Dienstag, 7. Juli 2015 10:30 10

Page 43: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

306

'set([1, 2, 3, 4])'>>> repr(open("datei.txt", "w"))"<open file 'datei.txt', mode 'w' at 0xb7bea0f8>"

19.7.39 reversed(sequence)

Mit reversed kann eine Instanz sequence eines sequenziellen Datentyps effizient

rückwärts durchlaufen werden.

>>> for i in reversed([1, 2, 3, 4, 5, 6]):... print(i)654321

19.7.40 round(x, [n])

Die Funktion round rundet die Gleitkommazahl x auf n Nachkommastellen. Der Para-

meter 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 vorkom-

mende Element also nur einmal eingetragen wird.

>>> set()set()>>> set("Hallo Welt")

16 siehe Abschnitt 15.1, »Die Datentypen set und frozenset«

3633.book Seite 306 Dienstag, 7. Juli 2015 10:30 10

19.7 Eingebaute Funktionen

307

19

set({'a', ' ', 'e', 'H', 'l', 'o', 't', 'W'})>>> set({1,2,3,4})set({1, 2, 3, 4})

19.7.42 sorted(iterable, [key, reverse])

Die Funktion sorted erzeugt aus den Elementen von iterable eine sortierte Liste:

>>> 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'>"

Die Funktion str kann dazu verwendet werden, einen bytes-String oder eine bytear-

ray-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«

3633.book Seite 307 Dienstag, 7. Juli 2015 10:30 10

Page 44: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

308

Dabei muss für den Parameter encoding ein String übergeben werden, der das Enco-

ding enthält, mit dem der bytes-String codiert wurde, in diesem Fall utf-8. Der Para-

meter 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:

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 uni-code aus Python 2. Der dortige Datentyp str lässt sich vergleichen mit dem bytes-

String aus Python 3.

Weitere Informationen über die Datentypen str und bytes sowie über Unicode fin-

den 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 iter-

able 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

errors Beschreibung

"strict" Bei einem Decodierungsfehler wird eine ValueError-Exception gewor-

fen.

"ignore" Fehler bei der Decodierung werden ignoriert.

"replace" Ein Zeichen, das nicht decodiert werden konnte, wird durch das Uni-

code-Zeichen U+FFFD ( ), auch Replacement Character genannt,

ersetzt.

Tabelle 19.2 Mögliche Werte des Parameters errors

3633.book Seite 308 Dienstag, 7. Juli 2015 10:30 10

19.7 Eingebaute Funktionen

309

19

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") == strTrue>>> 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 ent-

halten.

>>> 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«

3633.book Seite 309 Dienstag, 7. Juli 2015 10:30 10

Page 45: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

19 Funktionen

310

Damit haben wir den ersten Teil der eingebauten Funktionen besprochen. In Kapitel

21, in dem die Konzepte der objektorientierten Programmierung besprochen wer-

den, folgt in Abschnitt 21.5, »Built-in Functions für Objektorientierung«, die Beschrei-

bung der eingebauten Funktionen mit objektorientiertem Hintergrund.

3633.book Seite 310 Dienstag, 7. Juli 2015 10:30 10

Page 46: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

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

3633.book Seite 3 Dienstag, 7. Juli 2015 10:30 10

Page 47: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Inhalt

5

Inhalt

1 Einleitung 25

2 Die Programmiersprache Python 31

2.1 Historie, Konzepte, Einsatzgebiete ............................................................................. 31

2.1.1 Geschichte und Entstehung ............................................................................. 31

2.1.2 Grundlegende Konzepte .................................................................................... 32

2.1.3 Einsatzmöglichkeiten und Stärken ................................................................ 33

2.1.4 Einsatzbeispiele .................................................................................................... 34

2.2 Die Verwendung von Python ......................................................................................... 34

2.2.1 Windows ................................................................................................................. 36

2.2.2 Linux ......................................................................................................................... 36

2.2.3 OS X ........................................................................................................................... 36

TEIL I Einstieg in Python

3 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 Funktionen ............................................................................................................. 48

3.8.2 Methoden ............................................................................................................... 48

3.9 Bildschirmausgaben .......................................................................................................... 49

3633.book Seite 5 Dienstag, 7. Juli 2015 10:30 10

Page 48: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Inhalt

6

4 Der Weg zum ersten Programm 53

4.1 Tippen, kompilieren, testen ........................................................................................... 53

4.1.1 Shebang ................................................................................................................... 55

4.1.2 Interne Abläufe ..................................................................................................... 55

4.2 Grundstruktur eines Python-Programms ................................................................. 57

4.2.1 Umbrechen langer Zeilen .................................................................................. 59

4.2.2 Zusammenfügen mehrerer Zeilen ................................................................. 59

4.3 Das erste Programm .......................................................................................................... 60

4.4 Kommentare ......................................................................................................................... 63

4.5 Der Fehlerfall ......................................................................................................................... 63

5 Kontrollstrukturen 65

5.1 Fallunterscheidungen ....................................................................................................... 65

5.1.1 Die if-Anweisung .................................................................................................. 65

5.1.2 Bedingte Ausdrücke ............................................................................................ 69

5.2 Schleifen .................................................................................................................................. 70

5.2.1 Die while-Schleife ................................................................................................ 70

5.2.2 Abbruch einer Schleife ....................................................................................... 71

5.2.3 Erkennen eines Schleifenabbruchs ................................................................ 72

5.2.4 Abbruch eines Schleifendurchlaufs ............................................................... 73

5.2.5 Die for-Schleife ..................................................................................................... 75

5.2.6 Die for-Schleife als Zählschleife ...................................................................... 77

5.3 Die pass-Anweisung .......................................................................................................... 78

6 Dateien 79

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 open(filename, [mode, buffering, encoding, errors, newline]) ............. 85

6.4.2 Attribute und Methoden eines Dateiobjekts ............................................. 87

6.4.3 Die Schreib-/Leseposition verändern ............................................................ 88

3633.book Seite 6 Dienstag, 7. Juli 2015 10:30 10

Inhalt

7

7 Das Laufzeitmodell 91

7.1 Die Struktur von Instanzen ............................................................................................. 93

7.1.1 Datentyp ................................................................................................................. 93

7.1.2 Wert .......................................................................................................................... 94

7.1.3 Identität .................................................................................................................. 95

7.2 Referenzen und Instanzen freigeben ......................................................................... 97

7.3 Mutable vs. immutable Datentypen .......................................................................... 98

7.3.1 Mutable Datentypen und Seiteneffekte ...................................................... 100

8 Funktionen, Methoden und Attribute 103

8.1 Parameter von Funktionen und Methoden ............................................................. 103

8.1.1 Positionsbezogene Parameter ......................................................................... 104

8.1.2 Schlüsselwortparameter ................................................................................... 105

8.1.3 Optionale Parameter .......................................................................................... 105

8.1.4 Reine Schlüsselwortparameter ....................................................................... 106

8.2 Attribute .................................................................................................................................. 106

9 Informationsquellen zu Python 109

9.1 Die Built-in Function help ................................................................................................ 109

9.2 Die Onlinedokumentation .............................................................................................. 110

9.3 PEPs ........................................................................................................................................... 110

TEIL II Datentypen

10 Das Nichts – NoneType 115

11 Operatoren 117

3633.book Seite 7 Dienstag, 7. Juli 2015 10:30 10

Page 49: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Inhalt

8

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 Zahlensysteme ...................................................................................................... 125

12.4.2 Bit-Operationen .................................................................................................... 127

12.4.3 Methoden ............................................................................................................... 130

12.5 Gleitkommazahlen – float .............................................................................................. 130

12.6 Boolesche Werte – bool ................................................................................................... 133

12.6.1 Logische Operatoren ........................................................................................... 133

12.6.2 Wahrheitswerte nicht-boolescher Datentypen ......................................... 136

12.6.3 Auswertung logischer Operatoren ................................................................. 137

12.7 Komplexe Zahlen – complex .......................................................................................... 138

13 Sequenzielle Datentypen 141

13.1 Operationen auf Instanzen sequenzieller Datentypen ...................................... 142

13.1.1 Ist ein Element vorhanden? – die Operatoren in und not in ................. 143

13.1.2 Verkettung von Sequenzen – die Operatoren + und += ......................... 145

13.1.3 Wiederholung von Sequenzen – die Operatoren * und *= ..................... 146

13.1.4 Zugriff auf bestimmte Elemente einer Sequenz – der []-Operator ..... 147

13.1.5 Länge einer Sequenz – die Built-in Function len ....................................... 151

13.1.6 Das kleinste und das größte Element einer Sequenz –

min und max ......................................................................................................... 152

13.1.7 Die Position eines Elements in der Sequenz – s.index(x, [i, j]) .............. 152

13.1.8 Anzahl der Vorkommen eines Elements der Sequenz – s.count(x) ..... 153

13.2 Listen – list ............................................................................................................................. 154

13.2.1 Verändern eines Wertes innerhalb der Liste – Zuweisung mit [] ........ 155

13.2.2 Ersetzen von Teillisten und Einfügen neuer Elemente –

Zuweisung mit [] .................................................................................................. 155

13.2.3 Elemente und Teillisten löschen – del zusammen mit [] ....................... 156

13.2.4 Methoden von list-Instanzen ........................................................................... 156

13.2.5 Weitere Eigenschaften von Listen .................................................................. 163

3633.book Seite 8 Dienstag, 7. Juli 2015 10:30 10

Inhalt

9

13.3 Unveränderliche Listen – tuple ..................................................................................... 166

13.3.1 Tuple Packing/Unpacking und Sequence Unpacking .............................. 166

13.3.2 Immutabel heißt nicht zwingend unveränderlich! .................................. 168

13.4 Strings – str, bytes, bytearray ........................................................................................ 168

13.4.1 Steuerzeichen ........................................................................................................ 171

13.4.2 String-Methoden .................................................................................................. 173

13.4.3 Formatierung von Strings ................................................................................. 183

13.4.4 Zeichensätze und Sonderzeichen ................................................................... 192

14 Zuordnungen 201

14.1 Dictionary – dict ................................................................................................................... 201

14.1.1 Operatoren ............................................................................................................. 204

14.1.2 Methoden ............................................................................................................... 206

15 Mengen 213

15.1 Die Datentypen set und frozenset .............................................................................. 213

15.1.1 Operatoren ............................................................................................................. 214

15.1.2 Methoden ............................................................................................................... 220

15.2 Veränderliche Mengen – set .......................................................................................... 221

15.3 Unveränderliche Mengen – frozenset ....................................................................... 223

16 Collections 225

16.1 Verkettete Dictionarys ..................................................................................................... 225

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

3633.book Seite 9 Dienstag, 7. Juli 2015 10:30 10

Page 50: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Inhalt

10

17 Datum und Zeit 235

17.1 Elementare Zeitfunktionen – time .............................................................................. 235

17.1.1 Attribute .................................................................................................................. 237

17.1.2 Funktionen ............................................................................................................. 238

17.2 Objektorientierte Datumsverwaltung – datetime .............................................. 243

17.2.1 datetime.date ........................................................................................................ 244

17.2.2 datetime.time ....................................................................................................... 245

17.2.3 datetime.datetime .............................................................................................. 246

17.2.4 datetime.timedelta ............................................................................................. 248

17.2.5 Operationen für datetime.datetime und datetime.date ........................ 251

17.2.6 Bemerkung zum Umgang mit Zeitzonen .................................................... 253

18 Aufzählungstypen – Enum 255

TEIL III Fortgeschrittene Programmiertechniken

19 Funktionen 261

19.1 Schreiben einer Funktion ................................................................................................. 263

19.2 Funktionsparameter .......................................................................................................... 267

19.2.1 Optionale Parameter .......................................................................................... 267

19.2.2 Schlüsselwortparameter ................................................................................... 268

19.2.3 Beliebige Anzahl von Parametern .................................................................. 269

19.2.4 Reine Schlüsselwortparameter ....................................................................... 271

19.2.5 Entpacken einer Parameterliste ...................................................................... 272

19.2.6 Seiteneffekte ......................................................................................................... 274

19.3 Namensräume ...................................................................................................................... 277

19.3.1 Zugriff auf globale Variablen – global .......................................................... 277

19.3.2 Zugriff auf den globalen Namensraum ........................................................ 278

19.3.3 Lokale Funktionen ................................................................................................ 279

19.3.4 Zugriff auf übergeordnete Namensräume – nonlocal ............................ 280

19.4 Anonyme Funktionen ........................................................................................................ 281

19.5 Annotationen ........................................................................................................................ 282

19.6 Rekursion ................................................................................................................................ 284

3633.book Seite 10 Dienstag, 7. Juli 2015 10:30 10

Inhalt

11

19.7 Eingebaute Funktionen .................................................................................................... 285

19.7.1 abs(x) ........................................................................................................................ 288

19.7.2 all(iterable) ............................................................................................................. 289

19.7.3 any(iterable) ........................................................................................................... 289

19.7.4 ascii(object) ............................................................................................................ 289

19.7.5 bin(x) ........................................................................................................................ 290

19.7.6 bool([x]) ................................................................................................................... 290

19.7.7 bytearray([source, encoding, errors]) ............................................................ 290

19.7.8 bytes([source, encoding, errors]) .................................................................... 291

19.7.9 chr(i) .......................................................................................................................... 291

19.7.10 complex([real, imag]) .......................................................................................... 292

19.7.11 dict([source]) .......................................................................................................... 292

19.7.12 divmod(a, b) ........................................................................................................... 293

19.7.13 enumerate(iterable) ............................................................................................ 293

19.7.14 eval(expression, [globals, locals]) ................................................................... 294

19.7.15 exec(object, [globals, locals]) ........................................................................... 294

19.7.16 filter(function, iterable) ..................................................................................... 295

19.7.17 float([x]) .................................................................................................................. 295

19.7.18 format(value, [format_spec]) .......................................................................... 296

19.7.19 frozenset([iterable]) ............................................................................................ 296

19.7.20 globals() ................................................................................................................... 296

19.7.21 hash(object) ........................................................................................................... 297

19.7.22 help([object]) ......................................................................................................... 298

19.7.23 hex(x) ....................................................................................................................... 298

19.7.24 id(object) ................................................................................................................. 298

19.7.25 input([prompt]) .................................................................................................... 298

19.7.26 int([x, base]) ........................................................................................................... 299

19.7.27 len(s) ......................................................................................................................... 299

19.7.28 list([sequence]) ..................................................................................................... 300

19.7.29 locals() ...................................................................................................................... 300

19.7.30 map(function, [*iterable]) ................................................................................. 300

19.7.31 max(iterable, {default, key})

max(arg1, arg2, [*args], {key}) ........................................................................... 302

19.7.32 min(iterable, {default, key})

min(arg1, arg2, [*args], {key}) ............................................................................ 303

19.7.33 oct(x) ......................................................................................................................... 303

19.7.34 ord(c) ........................................................................................................................ 303

19.7.35 pow(x, y, [z]) ........................................................................................................... 303

19.7.36 print([*objects], {sep, end, file, flush]) ........................................................... 304

19.7.37 range([start], stop, [step]) ................................................................................. 304

19.7.38 repr(object) ............................................................................................................. 305

3633.book Seite 11 Dienstag, 7. Juli 2015 10:30 10

Page 51: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Inhalt

12

19.7.39 reversed(sequence) ............................................................................................. 306

19.7.40 round(x, [n]) ........................................................................................................... 306

19.7.41 set([iterable]) ......................................................................................................... 306

19.7.42 sorted(iterable, [key, reverse]) ......................................................................... 307

19.7.43 str([object, encoding, errors]) ........................................................................... 307

19.7.44 sum(iterable, [start]) ........................................................................................... 308

19.7.45 tuple([iterable]) .................................................................................................... 309

19.7.46 type(object) ............................................................................................................ 309

19.7.47 zip([*iterables]) ..................................................................................................... 309

20 Modularisierung 311

20.1 Einbinden globaler Module ............................................................................................ 311

20.2 Lokale Module ...................................................................................................................... 314

20.2.1 Namenskonflikte .................................................................................................. 315

20.2.2 Modulinterne Referenzen ................................................................................. 316

20.2.3 Module ausführen ............................................................................................... 316

20.3 Pakete ....................................................................................................................................... 317

20.3.1 Importieren aller Module eines Pakets ......................................................... 319

20.3.2 Namespace Packages ......................................................................................... 320

20.3.3 Relative Import-Anweisungen ......................................................................... 320

20.4 Das Paket importlib ........................................................................................................... 321

20.4.1 Einbinden von Modulen und Paketen ........................................................... 322

20.4.2 Verändern des Import-Verhaltens ................................................................. 322

21 Objektorientierung 327

21.1 Klassen ..................................................................................................................................... 332

21.1.1 Definieren von Methoden ................................................................................. 333

21.1.2 Der Konstruktor und die Erzeugung von Attributen ................................ 334

21.2 Vererbung ............................................................................................................................... 337

21.2.1 Technische Grundlagen ..................................................................................... 338

21.2.2 Die Klasse GirokontoMitTagesumsatz .......................................................... 341

21.2.3 Mögliche Erweiterungen der Klasse Konto ................................................. 346

21.2.4 Ausblick ................................................................................................................... 350

21.2.5 Mehrfachvererbung ............................................................................................ 351

3633.book Seite 12 Dienstag, 7. Juli 2015 10:30 10

Inhalt

13

21.3 Setter und Getter und Property Attributes ............................................................. 352

21.3.1 Setter und Getter ................................................................................................. 352

21.3.2 Property-Attribute ............................................................................................... 353

21.4 Klassenattribute und Klassenmethoden sowie statische Methoden .......... 355

21.4.1 Statische Methoden ............................................................................................ 355

21.4.2 Klassenmethoden ................................................................................................ 356

21.4.3 Klassenattribute ................................................................................................... 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 Allgemeine Magic Methods .............................................................................. 364

21.7.2 Operatoren überladen ........................................................................................ 370

21.7.3 Datentypen emulieren ....................................................................................... 378

22 Ausnahmebehandlung 383

22.1 Exceptions .............................................................................................................................. 383

22.1.1 Eingebaute Exceptions ....................................................................................... 384

22.1.2 Werfen einer Exception ..................................................................................... 385

22.1.3 Abfangen einer Exception ................................................................................. 386

22.1.4 Eigene Exceptions ................................................................................................ 390

22.1.5 Erneutes Werfen einer Exception ................................................................... 392

22.1.6 Exception Chaining ............................................................................................. 395

22.2 Zusicherungen – assert ..................................................................................................... 396

23 Iteratoren und Generatoren 399

23.1 Comprehensions .................................................................................................................. 399

23.1.1 List Comprehensions .......................................................................................... 399

23.1.2 Dict Comprehensions ......................................................................................... 402

23.1.3 Set Comprehensions ........................................................................................... 403

23.2 Generatoren .......................................................................................................................... 403

23.2.1 Subgeneratoren .................................................................................................... 406

23.2.2 Generator Expressions ....................................................................................... 409

3633.book Seite 13 Dienstag, 7. Juli 2015 10:30 10

Page 52: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Inhalt

14

23.3 Iteratoren ................................................................................................................................ 410

23.3.1 Verwendung von Iteratoren ............................................................................. 413

23.3.2 Mehrere Iteratoren für dieselbe Instanz ...................................................... 416

23.3.3 Nachteile von Iteratoren gegenüber dem direkten Zugriff

über Indizes ............................................................................................................ 419

23.3.4 Alternative Definition für iterierbare Objekte ........................................... 419

23.3.5 Funktionsiteratoren ............................................................................................ 420

23.4 Spezielle Generatoren – itertools ................................................................................ 421

24 Kontextobjekte 431

24.1 Die with-Anweisung .......................................................................................................... 431

24.2 Hilfsfunktionen für with-Kontexte – contextlib .................................................. 434

24.2.1 Einfache Funktionen als Kontext-Manager ................................................ 434

24.2.2 Bestimmte Exception-Typen unterdrücken ................................................ 435

24.2.3 Den Standard-Ausgabestrom umleiten ....................................................... 436

25 Manipulation von Funktionen und Methoden 437

25.1 Decorator ................................................................................................................................ 437

25.2 Das Modul functools .......................................................................................................... 440

25.2.1 Funktionsschnittstellen vereinfachen .......................................................... 440

25.2.2 Methodenschnittstellen vereinfachen ......................................................... 442

25.2.3 Caches ...................................................................................................................... 443

25.2.4 Ordnungsrelationen vervollständigen .......................................................... 444

25.2.5 Überladen von Funktionen ............................................................................... 445

TEIL IV Die Standardbibliothek

26 Mathematik 451

26.1 Mathematische Funktionen – math, cmath ........................................................... 451

26.1.1 Zahlentheoretische Funktionen ...................................................................... 452

26.1.2 Exponential- und Logarithmusfunktionen .................................................. 454

26.1.3 Trigonometrische und hyperbolische Funktionen .................................... 454

3633.book Seite 14 Dienstag, 7. Juli 2015 10:30 10

Inhalt

15

26.1.4 Umrechnen von Winkeln ................................................................................... 455

26.1.5 Darstellungsformen komplexer Zahlen ....................................................... 455

26.2 Zufallszahlengenerator – random ............................................................................... 456

26.2.1 Den Status speichern und laden ..................................................................... 457

26.2.2 Zufällige ganze Zahlen erzeugen .................................................................... 457

26.2.3 Zufällige Gleitkommazahlen erzeugen ........................................................ 458

26.2.4 Zufallsgesteuerte Operationen auf Sequenzen ......................................... 458

26.2.5 SystemRandom([seed]) ...................................................................................... 459

26.3 Präzise Dezimalzahlen – decimal ................................................................................. 460

26.3.1 Verwendung des Datentyps ............................................................................. 461

26.3.2 Nichtnumerische Werte .................................................................................... 464

26.3.3 Das Context-Objekt ............................................................................................. 465

27 Kryptografie 467

27.1 Hash-Funktionen – hashlib ............................................................................................. 467

27.1.1 Verwendung des Moduls .................................................................................. 469

27.1.2 Weitere Algorithmen .......................................................................................... 470

27.1.3 Vergleich großer Dateien .................................................................................. 470

27.1.4 Passwörter .............................................................................................................. 471

27.2 Verschlüsselung – PyCrypto ........................................................................................... 472

27.2.1 Symmetrische Verschlüsselungsverfahren ................................................. 473

27.2.2 Asymmetrische Verschlüsselungsverfahren .............................................. 476

28 Reguläre Ausdrücke 481

28.1 Syntax regulärer Ausdrücke ........................................................................................... 481

28.1.1 Beliebige Zeichen ................................................................................................. 482

28.1.2 Zeichenklassen ...................................................................................................... 482

28.1.3 Quantoren .............................................................................................................. 483

28.1.4 Vordefinierte Zeichenklassen .......................................................................... 485

28.1.5 Weitere Sonderzeichen ...................................................................................... 487

28.1.6 Genügsame Quantoren ..................................................................................... 488

28.1.7 Gruppen .................................................................................................................. 489

28.1.8 Alternativen ........................................................................................................... 490

28.1.9 Extensions .............................................................................................................. 490

3633.book Seite 15 Dienstag, 7. Juli 2015 10:30 10

Page 53: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Inhalt

16

28.2 Verwendung des Moduls ................................................................................................. 493

28.2.1 Searching ................................................................................................................ 493

28.2.2 Matching ................................................................................................................. 494

28.2.3 Einen String aufspalten ..................................................................................... 494

28.2.4 Teile eines Strings ersetzen .............................................................................. 495

28.2.5 Problematische Zeichen ersetzen ................................................................... 496

28.2.6 Einen regulären Ausdruck kompilieren ........................................................ 496

28.2.7 Flags .......................................................................................................................... 496

28.2.8 Das Match-Objekt ................................................................................................ 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 environ ..................................................................................................................... 506

29.1.2 getpid() .................................................................................................................... 506

29.1.3 cpu_count() ............................................................................................................ 506

29.1.4 system(cmd) .......................................................................................................... 507

29.1.5 popen(command, [mode, buffering]) ........................................................... 507

29.2 Zugriff auf die Laufzeitumgebung – sys ................................................................... 508

29.2.1 Kommandozeilenparameter ............................................................................ 508

29.2.2 Standardpfade ...................................................................................................... 508

29.2.3 Standard-Ein-/Ausgabeströme ....................................................................... 509

29.2.4 Das Programm beenden .................................................................................... 509

29.2.5 Details zur Python-Version ............................................................................... 510

29.2.6 Details zum Betriebssystem ............................................................................. 511

29.2.7 Hooks ....................................................................................................................... 512

30 Kommandozeilenparameter 515

30.1 Taschenrechner – ein einfaches Beispiel .................................................................. 516

30.2 Ein weiteres Beispiel .......................................................................................................... 520

3633.book Seite 16 Dienstag, 7. Juli 2015 10:30 10

Inhalt

17

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 Verzeichnis- und Dateioperationen ............................................................... 537

31.3.2 Archivoperationen ............................................................................................... 538

31.4 Temporäre Dateien – tempfile ...................................................................................... 541

32 Parallele Programmierung 543

32.1 Prozesse, Multitasking und Threads .......................................................................... 543

32.1.1 Die Leichtgewichte unter den Prozessen – Threads ................................. 544

32.1.2 Threads oder Prozesse? ...................................................................................... 546

32.2 Pythons Schnittstellen zur Parallelisierung ............................................................ 546

32.3 Parallelisierung von Funktionsaufrufen ................................................................... 547

32.3.1 Ein Beispiel mit einem futures.ThreadPoolExecutor ................................ 548

32.3.2 Executor-Instanzen als Kontext-Manager ................................................... 550

32.3.3 Die Verwendung von futures.ProcessPoolExecutor ................................. 550

32.3.4 Die Verwaltung der Aufgaben eines Executors ......................................... 551

32.4 Die Module threading und multiprocessing ........................................................... 558

32.5 Die Thread-Unterstützung in Python ......................................................................... 558

32.5.1 Kritische Bereiche mit Lock-Objekten absichern ....................................... 560

32.5.2 Datenaustausch zwischen Threads mit Critical Sections ...................... 562

32.5.3 Gefahren von Critical Sections – Deadlocks ............................................... 567

32.6 Einblick in das Modul multiprocessing ...................................................................... 568

32.7 Ausblick ................................................................................................................................... 569

33 Datenspeicherung 571

33.1 Komprimierte Dateien lesen und schreiben – gzip .............................................. 571

33.2 XML ............................................................................................................................................ 573

33.2.1 ElementTree ........................................................................................................... 575

33.2.2 SAX – Simple API for XML .................................................................................. 583

3633.book Seite 17 Dienstag, 7. Juli 2015 10:30 10

Page 54: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Inhalt

18

33.3 Datenbanken ........................................................................................................................ 587

33.3.1 Pythons eingebaute Datenbank – sqlite3 .................................................... 590

33.4 Serialisierung von Instanzen – pickle ......................................................................... 607

33.4.1 Funktionale Schnittstelle .................................................................................. 608

33.4.2 Objektorientierte Schnittstelle ........................................................................ 609

33.5 Das Datenaustauschformat JSON – json .................................................................. 610

33.6 Das Tabellenformat CSV – csv ....................................................................................... 612

33.6.1 reader-Objekte – Daten aus einer CSV-Datei lesen .................................. 613

33.6.2 Dialect-Objekte – eigene Dialekte verwenden .......................................... 615

34 Netzwerkkommunikation 619

34.1 Socket API ............................................................................................................................... 620

34.1.1 Client-Server-Systeme ........................................................................................ 621

34.1.2 UDP ........................................................................................................................... 624

34.1.3 TCP ............................................................................................................................ 626

34.1.4 Blockierende und nicht-blockierende Sockets ........................................... 628

34.1.5 Erzeugen eines Sockets ...................................................................................... 629

34.1.6 Die Socket-Klasse ................................................................................................. 631

34.1.7 Netzwerk-Byte-Order .......................................................................................... 634

34.1.8 Multiplexende Server – selectors ................................................................... 635

34.1.9 Objektorientierte Serverentwicklung – socketserver .............................. 637

34.2 URLs – urllib ........................................................................................................................... 639

34.2.1 Zugriff auf entfernte Ressourcen – urllib.request .................................... 640

34.2.2 Einlesen und Verarbeiten von URLs – urllib.parse .................................... 644

34.3 FTP – ftplib ............................................................................................................................. 648

34.3.1 Mit einem FTP-Server verbinden ..................................................................... 649

34.3.2 FTP-Kommandos ausführen ............................................................................. 650

34.3.3 Mit Dateien und Verzeichnissen arbeiten ................................................... 650

34.3.4 Übertragen von Dateien .................................................................................... 652

34.4 E-Mail ........................................................................................................................................ 654

34.4.1 SMTP – smtplib ..................................................................................................... 655

34.4.2 POP3 – poplib ........................................................................................................ 658

34.4.3 IMAP4 – imaplib ................................................................................................... 662

34.4.4 Erstellen komplexer E-Mails – email ............................................................. 668

3633.book Seite 18 Dienstag, 7. Juli 2015 10:30 10

Inhalt

19

34.5 Telnet – telnetlib ................................................................................................................. 673

34.5.1 Die Klasse Telnet .................................................................................................. 673

34.5.2 Beispiel ..................................................................................................................... 674

34.6 XML-RPC .................................................................................................................................. 676

34.6.1 Der Server ............................................................................................................... 677

34.6.2 Der Client ................................................................................................................ 680

34.6.3 Multicall .................................................................................................................. 682

34.6.4 Einschränkungen ................................................................................................. 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 Das Meldungsformat anpassen ...................................................................... 694

35.3.2 Logging Handler ................................................................................................... 696

35.4 Automatisiertes Testen .................................................................................................... 698

35.4.1 Testfälle in Docstrings – doctest ..................................................................... 698

35.4.2 Unit Tests – unittest ........................................................................................... 703

35.5 Analyse des Laufzeitverhaltens .................................................................................... 706

35.5.1 Laufzeitmessung – timeit ................................................................................. 707

35.5.2 Profiling – cProfile ................................................................................................ 710

35.5.3 Tracing – trace ....................................................................................................... 713

35.6 Optimierung .......................................................................................................................... 716

35.6.1 Die Optimize-Option ........................................................................................... 717

35.6.2 Mutabel vs. immutabel ...................................................................................... 717

35.6.3 Schleifen .................................................................................................................. 718

35.6.4 Funktionsaufrufe ................................................................................................. 719

35.6.5 C ................................................................................................................................. 719

35.6.6 Lookup ...................................................................................................................... 720

35.6.7 Exceptions .............................................................................................................. 720

35.6.8 Keyword Arguments ........................................................................................... 721

35.6.9 Alternative Interpreter: PyPy ............................................................................ 721

3633.book Seite 19 Dienstag, 7. Juli 2015 10:30 10

Page 55: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Inhalt

20

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 729

37.1 Dynamisch ladbare Bibliotheken – ctypes .............................................................. 730

37.1.1 Ein einfaches Beispiel ......................................................................................... 730

37.1.2 Die eigene Bibliothek .......................................................................................... 731

37.1.3 Datentypen ............................................................................................................ 733

37.1.4 Schnittstellenbeschreibung ............................................................................. 735

37.1.5 Pointer ..................................................................................................................... 737

37.1.6 Strings ...................................................................................................................... 738

37.2 Schreiben von Extensions ................................................................................................ 739

37.2.1 Ein einfaches Beispiel ......................................................................................... 739

37.2.2 Exceptions .............................................................................................................. 744

37.2.3 Erzeugen der Extension ..................................................................................... 745

37.2.4 Reference Counting ............................................................................................. 747

37.3 Python als eingebettete Skriptsprache ..................................................................... 748

37.3.1 Ein einfaches Beispiel ......................................................................................... 748

37.3.2 Ein komplexeres Beispiel ................................................................................... 750

37.4 Alternative Interpreter ..................................................................................................... 753

37.4.1 Interoperabilität mit der Java Runtime Environment – Jython ............ 754

37.4.2 Interoperabilität mit .NET – IronPython ....................................................... 759

38 Distribution von Python-Projekten 765

38.1 Eine Geschichte der Distributionen in Python ....................................................... 765

38.1.1 Der klassische Ansatz – distutils ..................................................................... 766

38.1.2 Der neue Standard – setuptools ..................................................................... 766

38.1.3 Der Paketindex – PyPI und pip ......................................................................... 767

38.2 Erstellen von Distributionen – setuptools ............................................................... 767

38.2.1 Schreiben des Moduls ........................................................................................ 768

3633.book Seite 20 Dienstag, 7. Juli 2015 10:30 10

Inhalt

21

38.2.2 Das Installationsskript ........................................................................................ 769

38.2.3 Erstellen einer Quellcodedistribution ........................................................... 774

38.2.4 Erstellen einer Binärdistribution ..................................................................... 774

38.2.5 Distributionen installieren ................................................................................ 776

38.2.6 Eigenständige Distributionen erstellen ........................................................ 776

38.2.7 Erstellen von EXE-Dateien – cx_Freeze ......................................................... 777

38.3 Der Python-Paketmanager – pip .................................................................................. 778

38.4 Lokalisierung von Programmen – gettext ............................................................... 779

38.4.1 Beispiel für die Verwendung von gettext .................................................... 780

38.4.2 Erstellen des Sprachkompilats ......................................................................... 781

39 Grafische Benutzeroberflächen 785

39.1 Toolkits .................................................................................................................................... 785

39.2 Einführung in tkinter ......................................................................................................... 788

39.2.1 Ein einfaches Beispiel ......................................................................................... 788

39.2.2 Steuerelementvariablen .................................................................................... 790

39.2.3 Der Packer ............................................................................................................... 792

39.2.4 Events ....................................................................................................................... 796

39.2.5 Steuerelemente .................................................................................................... 803

39.2.6 Zeichnungen – das Canvas-Widget ............................................................... 823

39.2.7 Weitere Module .................................................................................................... 830

39.3 Einführung in PyQt ............................................................................................................. 834

39.3.1 Installation ............................................................................................................. 834

39.3.2 Grundlegende Konzepte von Qt ..................................................................... 835

39.3.3 Entwicklungsprozess .......................................................................................... 837

39.4 Signale und Slots ................................................................................................................. 844

39.5 Wichtige Widgets ................................................................................................................ 847

39.5.1 QCheckBox ............................................................................................................. 847

39.5.2 QComboBox ........................................................................................................... 848

39.5.3 QDateEdit, QTimeEdit, QDateTimeEdit ........................................................ 849

39.5.4 QDialog .................................................................................................................... 849

39.5.5 QLineEdit ................................................................................................................. 850

39.5.6 QListWidget, QListView ..................................................................................... 850

39.5.7 QProgressBar ......................................................................................................... 851

39.5.8 QPushButton ......................................................................................................... 852

39.5.9 QRadioButton ........................................................................................................ 852

39.5.10 QSlider, QDial ........................................................................................................ 852

3633.book Seite 21 Dienstag, 7. Juli 2015 10:30 10

Page 56: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Inhalt

22

39.5.11 QTextEdit ................................................................................................................ 853

39.5.12 QWidget .................................................................................................................. 854

39.6 Zeichenfunktionalität ....................................................................................................... 855

39.6.1 Werkzeuge .............................................................................................................. 855

39.6.2 Koordinatensystem ............................................................................................. 857

39.6.3 Einfache Formen .................................................................................................. 858

39.6.4 Grafiken ................................................................................................................... 860

39.6.5 Text ........................................................................................................................... 861

39.6.6 Eye Candy ................................................................................................................ 863

39.7 Model-View-Architektur .................................................................................................. 867

39.7.1 Beispielprojekt: ein Adressbuch ...................................................................... 868

39.7.2 Auswählen von Einträgen ................................................................................. 877

39.7.3 Bearbeiten von Einträgen .................................................................................. 879

40 Python als serverseitige Programmiersprache im WWW – ein Einstieg in Django 883

40.1 Konzepte und Besonderheiten von Django ............................................................ 884

40.2 Installation von Django .................................................................................................... 885

40.2.1 Installation unter Linux und OS X .................................................................. 886

40.2.2 Installation unter Windows ............................................................................. 887

40.3 Erstellen eines neuen Django-Projekts ..................................................................... 888

40.3.1 Der Entwicklungswebserver ............................................................................. 889

40.3.2 Konfiguration des Projekts ............................................................................... 890

40.4 Erstellung einer Applikation .......................................................................................... 892

40.4.1 Die Applikation in das Projekt einbinden ..................................................... 894

40.4.2 Ein Model definieren ........................................................................................... 894

40.4.3 Beziehungen zwischen Modellen ................................................................... 895

40.4.4 Übertragung des Modells in die Datenbank ............................................... 896

40.4.5 Das Model-API ....................................................................................................... 897

40.4.6 Unser Projekt bekommt ein Gesicht .............................................................. 903

40.4.7 Djangos Template-System ................................................................................ 910

40.4.8 Verarbeitung von Formulardaten ................................................................... 923

40.4.9 Djangos Administrationsoberfläche ............................................................. 926

3633.book Seite 22 Dienstag, 7. Juli 2015 10:30 10

Inhalt

23

41 Wissenschaftliches Rechnen 933

41.1 Installation ............................................................................................................................. 934

41.2 Das Modellprogramm ....................................................................................................... 934

41.2.1 Der Import von numpy, scipy und matplotlib ............................................ 936

41.2.2 Vektorisierung und der Datentyp numpy.ndarray ................................... 936

41.2.3 Visualisieren von Daten mit matplotlib.pyplot ......................................... 940

41.3 Überblick über die Module numpy und scipy ......................................................... 943

41.3.1 Überblick über den Datentyp numpy.ndarray ........................................... 943

41.3.2 Überblick über scipy ............................................................................................ 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

42.4 Kommandozeilen-Interpreter ....................................................................................... 959

42.5 Dateiinterface für Strings – io.StringIO .................................................................... 961

42.6 Generatoren als Konsumenten ..................................................................................... 962

42.6.1 Ein Decorator für konsumierende Generatorfunktionen ....................... 964

42.6.2 Auslösen von Exceptions in einem Generator ........................................... 965

42.6.3 Eine Pipeline als Verkettung konsumierender Generator-

funktionen .............................................................................................................. 966

42.7 Kopieren von Instanzen – copy ..................................................................................... 967

42.8 Die interaktive Python-Shell – IPython ..................................................................... 971

42.8.1 Die interaktive Shell ............................................................................................ 971

42.8.2 Das IPython-Notebook ....................................................................................... 974

42.9 Bildverarbeitung – Pillow ................................................................................................ 977

42.9.1 Bilddateien laden und speichern .................................................................... 978

42.9.2 Zugriff auf einzelne Pixel ................................................................................... 979

42.9.3 Teilbereiche eines Bildes ausschneiden ....................................................... 979

42.9.4 Bilder zusammenfügen ...................................................................................... 980

42.9.5 Geometrische Bildtransformationen ............................................................ 981

42.9.6 Vordefinierte Bildfilter ....................................................................................... 982

42.9.7 Eigene Pixeloperationen .................................................................................... 983

42.9.8 Bildverbesserungen ............................................................................................. 984

3633.book Seite 23 Dienstag, 7. Juli 2015 10:30 10

Page 57: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Inhalt

24

42.9.9 Zeichenoperationen ............................................................................................ 985

42.9.10 Interoperabilität ................................................................................................... 986

43 Von Python 2 nach Python 3 987

43.1 Die wichtigsten Unterschiede ....................................................................................... 990

43.1.1 Ein-/Ausgabe ......................................................................................................... 990

43.1.2 Iteratoren ................................................................................................................ 991

43.1.3 Strings ...................................................................................................................... 992

43.1.4 Ganze Zahlen ......................................................................................................... 993

43.1.5 Exception Handling ............................................................................................. 994

43.1.6 Standardbibliothek .............................................................................................. 994

43.1.7 Neue Sprachelemente in Python 3 ................................................................. 995

43.2 Automatische Konvertierung ........................................................................................ 996

43.3 Geplante Sprachelemente .............................................................................................. 999

A Anhang 1001

A.1 Reservierte Wörter ............................................................................................................. 1001

A.2 Eingebaute Funktionen .................................................................................................... 1001

A.3 Eingebaute Exceptions ..................................................................................................... 1005

A.4 Python IDEs ............................................................................................................................ 1009

Index ........................................................................................................................................................ 1017

3633.book Seite 24 Dienstag, 7. Juli 2015 10:30 10

Page 58: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Index

1017

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

3633.book Seite 1017 Dienstag, 7. Juli 2015 10:30 10

Page 59: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Index

1018

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

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

3633.book Seite 1018 Dienstag, 7. Juli 2015 10:30 10

Index

1019

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

3633.book Seite 1019 Dienstag, 7. Juli 2015 10:30 10

Page 60: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Index

1020

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

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

3633.book Seite 1020 Dienstag, 7. Juli 2015 10:30 10

Index

1021

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

3633.book Seite 1021 Dienstag, 7. Juli 2015 10:30 10

Page 61: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Index

1022

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 ....................................................................... 358

hash ........................................................................... 297

hashable ................................................................... 367

Hash-Funktion ...................................................... 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

3633.book Seite 1022 Dienstag, 7. Juli 2015 10:30 10

Index

1023

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) ........................................................ 810

LabelFrame (tkinter) ........................................... 810

lambda ..................................................................... 281

Laufzeitmessung .................................................. 707

3633.book Seite 1023 Dienstag, 7. Juli 2015 10:30 10

Page 62: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Index

1024

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

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

3633.book Seite 1024 Dienstag, 7. Juli 2015 10:30 10

Index

1025

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

3633.book Seite 1025 Dienstag, 7. Juli 2015 10:30 10

Page 63: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Index

1026

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

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

3633.book Seite 1026 Dienstag, 7. Juli 2015 10:30 10

Index

1027

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

3633.book Seite 1027 Dienstag, 7. Juli 2015 10:30 10

Page 64: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Index

1028

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

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

3633.book Seite 1028 Dienstag, 7. Juli 2015 10:30 10

Index

1029

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

3633.book Seite 1029 Dienstag, 7. Juli 2015 10:30 10

Page 65: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Index

1030

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

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

3633.book Seite 1030 Dienstag, 7. Juli 2015 10:30 10

Index

1031

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 ........................................................................... 573

Attribut ............................................................... 574

Deklaration ....................................................... 573

DOM ..................................................................... 575

Parser ................................................................... 574

SAX ........................................................................ 583

3633.book Seite 1031 Dienstag, 7. Juli 2015 10:30 10

Page 66: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

Index

1032

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

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

3633.book Seite 1032 Dienstag, 7. Juli 2015 10:30 10

Page 67: Python 3 – Das umfassende Handbuch · Vor Python hatte van Rossum an der Entwicklung der Programmiersprache ABC mit-gewirkt, die mit dem Ziel entworfen wurde, so einfach zu sein,

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 Darstel-lung von der E-Book-Fassung des vorgestellten Buches abweichen können. Diese Leseprobe ist in all ihren Teilen urheberrechtlich geschützt. Alle Nut-zungs- und Verwertungsrechte liegen beim Autor und beim Verlag.

Teilen Sie Ihre Leseerfahrung mit uns!

Johannes Ernesti kennt Python wie seine Westentasche. Gemeinsam mit Peter Kaiser erstellt er professionelle Pro-gramme. Er hat Informatik an der Universität in Karlsruhe studiert.

Peter Kaiser hat Informatik an der Universität in Karls-ruhe studiert. Er arbeitet schon länger mit Python und erstellt professionelle Programme.

Johannes Ernesti, Peter Kaiser

Python 3 – Das umfassende Handbuch1.032 Seiten, gebunden, mit CD, 4. Auflage 2015 39,90 Euro, ISBN 978-3-8362-3633-1

www.rheinwerk-verlag.de/3789

Wissen, wie’s geht.