Inhaltsverzeichnis

Alle Kapitel aufklappen
Alle Kapitel zuklappen
1 Einleitung
31
1.1 Warum haben wir dieses Buch geschrieben?
31
1.2 Was leistet dieses Buch?
32
1.3 Wie ist dieses Buch aufgebaut?
32
1.4 Wer sollte dieses Buch wie lesen?
33
1.5 Beispielprogramme
34
1.6 Vorwort zur achten Auflage
34
1.7 Danksagung
35
2 Die Programmiersprache Python
39
2.1 Geschichte und Entstehung
39
2.2 Grundlegende Konzepte
40
2.3 Einsatzmöglichkeiten und Stärken
41
2.4 Die Installation von Python
43
2.4.1 Installation von Anaconda unter Windows
44
2.4.2 Installation von Anaconda unter macOS
44
2.4.3 Installation von Anaconda unter Linux
45
2.5 Drittanbietermodule installieren
45
2.6 Die Verwendung von Python
46
TEIL I Einstieg in Python
49
3 Erste Schritte im interaktiven Modus
51
3.1 Ganze Zahlen
52
3.2 Gleitkommazahlen
53
3.3 Zeichenketten
54
3.4 Listen
55
3.5 Dictionarys
55
3.6 Variablen
56
3.6.1 Die besondere Bedeutung des Unterstrichs
57
3.6.2 Bezeichner
58
3.7 Logische Ausdrücke
58
3.8 Funktionen und Methoden
60
3.8.1 Funktionen
60
3.8.2 Methoden
61
3.9 Bildschirmausgaben
62
3.10 Module
63
4 Der Weg zum ersten Programm
65
4.1 Tippen, kompilieren, testen
65
4.1.1 Windows
66
4.1.2 Linux und macOS
66
4.1.3 Shebang
67
4.1.4 Interne Abläufe
67
4.2 Grundstruktur eines Python-Programms
69
4.2.1 Umbrechen langer Zeilen
71
4.2.2 Zusammenfügen mehrerer Zeilen
72
4.3 Das erste Programm
73
4.3.1 Initialisierung
74
4.3.2 Schleifenkopf
74
4.3.3 Schleifenkörper
74
4.3.4 Bildschirmausgabe
75
4.4 Kommentare
75
4.5 Der Fehlerfall
76
5 Kontrollstrukturen
79
5.1 Fallunterscheidungen
79
5.1.1 Die if-Anweisung
79
5.1.2 Bedingte Ausdrücke
82
5.2 Schleifen
83
5.2.1 Die while-Schleife
83
5.2.2 Abbruch einer Schleife
84
5.2.3 Erkennen eines Schleifenabbruchs
85
5.2.4 Abbruch eines Schleifendurchlaufs
86
5.2.5 Die for-Schleife
88
5.3 Die pass-Anweisung
91
5.4 Zuweisungsausdrücke
91
5.4.1 Motivation
93
5.4.2 Das Spiel Zahlenraten mit einem Zuweisungsausdruck
94
6 Dateien
95
6.1 Datenströme
95
6.2 Daten aus einer Datei auslesen
96
6.2.1 Eine Datei öffnen und schließen
97
6.2.2 Die with-Anweisung
97
6.2.3 Den Dateiinhalt auslesen
98
6.3 Daten in eine Datei schreiben
101
6.4 Das Dateiobjekt erzeugen
102
6.4.1 Die Built-in Function open
102
6.4.2 Attribute und Methoden eines Dateiobjekts
104
6.4.3 Die Schreib-/Leseposition verändern
105
7 Das Datenmodell
109
7.1 Die Struktur von Instanzen
111
7.1.1 Datentyp
112
7.1.2 Wert
113
7.1.3 Identität
114
7.2 Referenzen löschen
116
7.3 Mutable vs. immutable Datentypen
118
7.3.1 Mutable Datentypen und Seiteneffekte
119
8 Funktionen, Methoden und Attribute
123
8.1 Parameter von Funktionen und Methoden
123
8.1.1 Positionsbezogene Parameter
124
8.1.2 Schlüsselwortparameter
125
8.1.3 Optionale Parameter
125
8.1.4 Reine Schlüsselwortparameter
126
8.2 Attribute
126
9 Informationsquellen zu Python
129
9.1 Die Built-in Function help
129
9.2 Die Onlinedokumentation
130
9.3 PEPs
130
TEIL II Datentypen
133
10 Basisdatentypen: eine Übersicht
135
10.1 Das Nichts – NoneType
136
10.2 Operatoren
137
10.2.1 Bindigkeit
138
10.2.2 Auswertungsreihenfolge
139
10.2.3 Verkettung von Vergleichen
140
11 Numerische Datentypen
143
11.1 Arithmetische Operatoren
143
11.1.1 Erweiterte Zuweisungen
144
11.2 Vergleichende Operatoren
145
11.3 Konvertierung zwischen numerischen Datentypen
146
11.4 Ganzzahlen – int
147
11.4.1 Zahlensysteme
148
11.4.2 Bit-Operationen
149
11.4.3 Die Methode bit_length
154
11.5 Gleitkommazahlen – float
154
11.5.1 Exponentialschreibweise
155
11.5.2 Genauigkeit
155
11.5.3 Unendlich und Not a Number
156
11.6 Boolesche Werte – bool
157
11.6.1 Logische Operatoren
157
11.6.2 Wahrheitswerte nicht boolescher Datentypen
160
11.6.3 Auswertung logischer Operatoren
161
11.7 Komplexe Zahlen – complex
163
12 Sequenzielle Datentypen
167
12.1 Der Unterschied zwischen Text und Binärdaten
167
12.2 Operationen auf Instanzen sequenzieller Datentypen
169
12.2.1 Auf Elemente prüfen
170
12.2.2 Verkettung
171
12.2.3 Wiederholung
173
12.2.4 Indizierung
174
12.2.5 Slicing
175
12.2.6 Länge einer Sequenz
179
12.2.7 Das kleinste und das größte Element
179
12.2.8 Ein Element suchen
180
12.2.9 Elemente zählen
181
12.3 Listen – list
181
12.3.1 Verändern eines Werts innerhalb der Liste – Zuweisung mit []
182
12.3.2 Ersetzen von Teillisten und Einfügen neuer Elemente – Zuweisung mit []
183
12.3.3 Elemente und Teillisten löschen – del zusammen mit []
183
12.3.4 Methoden von list-Instanzen
184
12.3.5 Listen sortieren – s.sort([key, reverse])
187
12.3.6 Seiteneffekte
190
12.3.7 List Comprehensions
193
12.4 Unveränderliche Listen – tuple
195
12.4.1 Packing und Unpacking
196
12.4.2 Immutabel heißt nicht zwingend unveränderlich!
198
12.5 Strings – str, bytes, bytearray
199
12.5.1 Steuerzeichen
202
12.5.2 Trennen von Strings
204
12.5.3 Suchen von Teil-Strings
206
12.5.4 Ersetzen von Teil-Strings
208
12.5.5 Entfernen von Präfixen oder Suffixen
210
12.5.6 Ausrichten von Strings
212
12.5.7 String-Tests
213
12.5.8 Verkettung von Elementen in sequenziellen Datentypen
214
12.5.9 Formatierung von Strings
215
12.5.10 Zeichensätze und Sonderzeichen
227
12.5.11 Template-Strings
236
13 Zuordnungen und Mengen
239
13.1 Dictionary – dict
239
13.1.1 Erzeugen eines Dictionarys
239
13.1.2 Schlüssel und Werte
241
13.1.3 Iteration
242
13.1.4 Operatoren
243
13.1.5 Methoden
246
13.1.6 Dict Comprehensions
252
13.2 Mengen – set und frozenset
253
13.2.1 Erzeugen eines Sets
253
13.2.2 Iteration
255
13.2.3 Operatoren
256
13.2.4 Methoden
261
13.2.5 Veränderliche Mengen – set
262
13.2.6 Unveränderliche Mengen – frozenset
264
14 Collections
267
14.1 Verkettete Dictionarys
267
14.2 Zählen von Häufigkeiten
268
14.2.1 d.elements()
269
14.2.2 d.most_common([n])
270
14.2.3 d.subtract([iterable])
270
14.2.4 d.update([iterable])
271
14.3 Dictionarys mit Standardwerten
271
14.4 Doppelt verkettete Listen
272
14.5 Benannte Tupel
274
14.5.1 namedtuple(typename, field_names, {rename})
274
15 Datum und Zeit
277
15.1 Elementare Zeitfunktionen – time
277
15.1.1 Der Datentyp struct_time
278
15.1.2 Konstanten
279
15.1.3 Funktionen
280
15.2 Objektorientierte Datumsverwaltung – datetime
286
15.2.1 datetime.date
286
15.2.2 datetime.time
288
15.2.3 datetime.datetime
289
15.2.4 datetime.timedelta
291
15.2.5 Operationen für datetime.datetime und datetime.date
294
15.3 Zeitzonen – zoneinfo
296
15.3.1 Die IANA-Zeitzonendatenbank
296
15.3.2 Zeitangaben in lokalen Zeitzonen
297
15.3.3 Rechnen mit Zeitangaben in lokalen Zeitzonen
298
16 Enumerationen und Flags
303
16.1 Aufzählungstypen – Enum
303
16.2 Aufzählungstypen für Bitmuster – Flag
305
16.3 Ganzzahlige Aufzählungstypen – IntEnum
306
TEIL III Fortgeschrittene Programmiertechniken
309
17 Funktionen
311
17.1 Definieren einer Funktion
313
17.2 Rückgabewerte
314
17.3 Funktionsobjekte
316
17.4 Optionale Parameter
317
17.5 Schlüsselwortparameter
318
17.6 Beliebige Anzahl von Parametern
319
17.7 Reine Schlüsselwortparameter
321
17.8 Reine Positionsparameter
323
17.9 Unpacking beim Funktionsaufruf
324
17.10 Seiteneffekte
326
17.11 Namensräume
329
17.11.1 Zugriff auf globale Variablen – global
329
17.11.2 Zugriff auf den globalen Namensraum
330
17.11.3 Lokale Funktionen
332
17.11.4 Zugriff auf übergeordnete Namensräume – nonlocal
332
17.11.5 Ungebundene lokale Variablen – eine Stolperfalle
334
17.12 Anonyme Funktionen
336
17.13 Rekursion
337
17.14 Eingebaute Funktionen
338
17.14.1 abs(x)
341
17.14.2 all(iterable)
342
17.14.3 any(iterable)
342
17.14.4 ascii(object)
342
17.14.5 bin(x)
343
17.14.6 bool([x])
343
17.14.7 bytearray([source, encoding, errors])
343
17.14.8 bytes([source, encoding, errors])
344
17.14.9 chr(i)
345
17.14.10 complex([real, imag])
345
17.14.11 dict([source])
346
17.14.12 divmod(a, b)
346
17.14.13 enumerate(iterable[, start])
346
17.14.14 eval(expression, [globals, locals])
347
17.14.15 exec(object, [globals, locals])
348
17.14.16 filter(function, iterable)
348
17.14.17 float([x])
348
17.14.18 format(value, [format_spec])
349
17.14.19 frozenset([iterable])
349
17.14.20 globals()
350
17.14.21 hash(object)
350
17.14.22 help([object])
351
17.14.23 hex(x)
351
17.14.24 id(object)
351
17.14.25 input([prompt])
352
17.14.26 int([x, base])
352
17.14.27 len(s)
353
17.14.28 list([sequence])
353
17.14.29 locals()
353
17.14.30 map(function, [*iterable, strict])
354
17.14.31 max(iterable, {default, key}), max(arg1, arg2, [*args], {key})
356
17.14.32 min(iterable, {default, key}), min(arg1, arg2, [*args], {key})
356
17.14.33 oct(x)
357
17.14.34 ord(c)
357
17.14.35 pow(x, y, [z])
357
17.14.36 print([*objects], {sep, end, file, flush})
357
17.14.37 range([start], stop, [step])
358
17.14.38 repr(object)
359
17.14.39 reversed(sequence)
359
17.14.40 round(x, [n])
360
17.14.41 set([iterable])
360
17.14.42 sorted(iterable, [key, reverse])
360
17.14.43 str([object, encoding, errors])
361
17.14.44 sum(iterable, [start])
362
17.14.45 tuple([iterable])
362
17.14.46 type(object)
362
17.14.47 zip([*iterables], {strict})
363
18 Module und Pakete
365
18.1 Einbinden globaler Module
366
18.2 Lokale Module
368
18.2.1 Namenskonflikte
370
18.2.2 Modulinterne Referenzen
370
18.2.3 Module ausführen
371
18.3 Pakete
371
18.3.1 Importieren aller Module eines Pakets
373
18.3.2 Namespace Packages
374
18.3.3 Relative Importanweisungen
375
18.4 Das Paket importlib
376
18.5 Geplante Sprachelemente
377
19 Objektorientierte Programmierung
379
19.1 Beispiel: Ein nicht objektorientiertes Konto
379
19.1.1 Ein neues Konto anlegen
380
19.1.2 Geld überweisen
380
19.1.3 Geld ein- und auszahlen
381
19.1.4 Den Kontostand anzeigen
382
19.2 Klassen
385
19.2.1 Definieren von Methoden
386
19.2.2 Der Konstruktor
387
19.2.3 Attribute
388
19.2.4 Beispiel: Ein objektorientiertes Konto
388
19.3 Vererbung
390
19.3.1 Ein einfaches Beispiel
391
19.3.2 Überschreiben von Methoden
392
19.3.3 Beispiel: Girokonto mit Tagesumsatz
394
19.3.4 Ausblick
403
19.4 Mehrfachvererbung
403
19.4.1 Mögliche Probleme der Mehrfachvererbung
404
19.5 Property-Attribute
404
19.5.1 Setter und Getter
405
19.5.2 Property-Attribute definieren
406
19.6 Statische Methoden
407
19.6.1 Statische Methoden definieren
408
19.7 Klassenmethoden
409
19.8 Klassenattribute
411
19.9 Built-in Functions für die objektorientierte Programmierung
411
19.9.1 Funktionen für die Verwaltung der Attribute einer Instanz
412
19.9.2 Funktionen für Informationen über die Klassenhierarchie
414
19.10 Erben von eingebauten Datentypen
415
19.11 Magic Methods und Magic Attributes
417
19.11.1 Allgemeine Magic Methods
417
19.11.2 Operatoren überladen
425
19.11.3 Datentypen emulieren – Duck-Typing
433
19.12 Datenklassen
438
19.12.1 Tupel und Listen
438
19.12.2 Dictionarys
439
19.12.3 Benannte Tupel
439
19.12.4 Veränderliche Datenklassen
440
19.12.5 Unveränderliche Datenklassen
441
19.12.6 Defaultwerte in Datenklassen
441
20 Ausnahmebehandlung
443
20.1 Exceptions
443
20.1.1 Eingebaute Exceptions
444
20.1.2 Das Werfen einer Exception
445
20.1.3 Das Abfangen einer Exception
446
20.1.4 Eigene Exceptions
451
20.1.5 Erneutes Werfen einer Exception
453
20.1.6 Exception Chaining
456
20.1.7 Exception Notes
457
20.2 Zusicherungen – assert
459
20.3 Warnungen
460
20.4 Exception Groups
461
20.4.1 Eine Exception Group
462
20.4.2 Die try/except*-Anweisung
464
21 Generatoren und Iteratoren
467
21.1 Generatoren
467
21.1.1 Subgeneratoren
470
21.1.2 Generator Expressions
473
21.2 Iteratoren
474
21.2.1 Das Iteratorprotokoll
475
21.2.2 Beispiel: Die Fibonacci-Folge
475
21.2.3 Beispiel: Der Goldene Schnitt
477
21.2.4 Ein Generator zur Implementierung von __iter__
477
21.2.5 Verwendung von Iteratoren
478
21.2.6 Mehrere Iteratoren für dieselbe Instanz
481
21.2.7 Nachteile von Iteratoren gegenüber dem direkten Zugriff über Indizes
483
21.2.8 Alternative Definition für iterierbare Objekte
483
21.2.9 Funktionsiteratoren
484
21.3 Spezielle Generatoren – itertools
485
21.3.1 accumulate(iterable, [func])
487
21.3.2 batched(iterable, n, {strict})
487
21.3.3 chain([*iterables])
487
21.3.4 combinations(iterable, r)
488
21.3.5 combinations_with_replacement(iterable, r)
488
21.3.6 compress(data, selectors)
489
21.3.7 count([start, step])
489
21.3.8 cycle(iterable)
490
21.3.9 dropwhile(predicate, iterable)
490
21.3.10 filterfalse(predicate, iterable)
491
21.3.11 groupby(iterable, [key])
491
21.3.12 islice(iterable, [start], stop, [step])
492
21.3.13 permutations(iterable, [r])
492
21.3.14 product([*iterables], [repeat])
492
21.3.15 repeat(object, [times])
493
21.3.16 starmap(function, iterable)
493
21.3.17 takewhile(predicate, iterable)
494
21.3.18 tee(iterable, [n])
494
21.3.19 zip_longest([*iterables], {fillvalue})
494
21.4 Generatoren als Konsumenten
495
21.4.1 Auslösen von Exceptions in einem Generator
497
21.4.2 Ein Anwendungsbeispiel für konsumierende Generatorfunktionen
498
22 Kontext-Manager
501
22.1 Die with-Anweisung
501
22.1.1 __enter__(self)
504
22.1.2 __exit__(self, exc_type, exc_value, traceback)
504
22.2 Hilfsfunktionen für with-Kontexte – contextlib
504
22.2.1 Dynamisch zusammengestellte Kontextkombinationen – ExitStack
504
22.2.2 Bestimmte Exception-Typen unterdrücken
505
22.2.3 Den Standardausgabestrom umleiten
506
22.2.4 Optionale Kontexte
506
22.2.5 Einfache Funktionen als Kontext-Manager
507
22.2.6 Das Arbeitsverzeichnis vorübergehend wechseln
508
23 Dekoratoren
509
23.1 Funktionsdekoratoren
509
23.1.1 Das Dekorieren von Funktionen und Methoden
511
23.1.2 Name und Docstring nach Anwendung eines Dekorators
512
23.1.3 Verschachtelte Dekoratoren
512
23.1.4 Beispiel: Ein Cache-Dekorator
513
23.2 Klassendekoratoren
515
23.3 Das Modul functools
516
23.3.1 Funktionsschnittstellen vereinfachen
516
23.3.2 Methodenschnittstellen vereinfachen
518
23.3.3 Caches
518
23.3.4 Ordnungsrelationen vervollständigen
520
23.3.5 Überladen von Funktionen
520
24 Annotationen und statische Typprüfung
523
24.1 Annotationen
525
24.1.1 Die Annotation von Funktionen und Methoden
526
24.1.2 Die Annotation von Variablen und Attributen
527
24.1.3 Der Zugriff auf Annotationen zur Laufzeit
529
24.1.4 Wann werden Annotationen evaluiert?
530
24.2 Type Hints – das Modul typing
532
24.2.1 Gültige Type Hints
533
24.2.2 Container-Typen
533
24.2.3 Abstrakte Container-Typen
534
24.2.4 Typ-Aliasse
535
24.2.5 Type Unions und optionale Werte
536
24.2.6 Literale
537
24.2.7 Typvariablen
538
24.3 Statische Typprüfung in Python – mypy
539
24.3.1 Installation
539
24.3.2 Beispiel
539
25 Structural Pattern Matching
541
25.1 Die match-Anweisung
541
25.2 Arten von Mustern in der case-Anweisung
542
25.2.1 Literal- und Wertmuster
543
25.2.2 ODER-Muster
543
25.2.3 Muster mit Typprüfung
544
25.2.4 Bedingungen für Matches formulieren
545
25.2.5 Teilmuster gruppieren
546
25.2.6 Capture- und Wildcard-Muster
546
25.2.7 Sequenzmuster
548
25.2.8 Zuordnungsmuster
550
25.2.9 Muster für Objekte und ihre Attributwerte
553
TEIL IV Die Standardbibliothek
559
26 Mathematik
561
26.1 Mathematische Funktionen – math, cmath
561
26.1.1 Allgemeine mathematische Funktionen
562
26.1.2 Exponential- und Logarithmusfunktionen
565
26.1.3 Trigonometrische und hyperbolische Funktionen
566
26.1.4 Distanzen und Normen
566
26.1.5 Umrechnen von Winkeln
567
26.1.6 Darstellungsformen komplexer Zahlen
567
26.2 Zufallszahlengenerator – random
568
26.2.1 Den Status des Zufallszahlengenerators speichern und laden
569
26.2.2 Zufällige ganze Zahlen erzeugen
569
26.2.3 Zufällige Gleitkommazahlen erzeugen
569
26.2.4 Zufallsgesteuerte Operationen auf Sequenzen
570
26.2.5 SystemRandom([seed])
572
26.3 Statistische Berechnungen – statistics
572
26.4 Intuitive Dezimalzahlen – decimal
574
26.4.1 Verwendung des Datentyps
574
26.4.2 Nichtnumerische Werte
577
26.4.3 Das Context-Objekt
578
26.5 Hash-Funktionen – hashlib
580
26.5.1 Verwendung des Moduls
582
26.5.2 Weitere Hash-Algorithmen
583
26.5.3 Vergleich großer Dateien
583
26.5.4 Passwörter
585
27 Bildschirmausgaben und Logging
589
27.1 Übersichtliche Ausgabe komplexer Objekte – pprint
589
27.2 Logdateien – logging
591
27.2.1 Das Meldungsformat anpassen
593
27.2.2 Logging-Handler
595
28 Reguläre Ausdrücke
599
28.1 Die Syntax regulärer Ausdrücke
599
28.1.1 Beliebige Zeichen
600
28.1.2 Zeichenklassen
600
28.1.3 Quantoren
601
28.1.4 Vordefinierte Zeichenklassen
603
28.1.5 Weitere Sonderzeichen
605
28.1.6 Genügsame Quantoren
606
28.1.7 Gruppen
607
28.1.8 Alternativen
608
28.1.9 Extensions
608
28.2 Verwendung des Moduls re
611
28.2.1 Searching
611
28.2.2 Matching
612
28.2.3 Einen String aufspalten
613
28.2.4 Teile eines Strings ersetzen
613
28.2.5 Problematische Zeichen ersetzen
614
28.2.6 Einen regulären Ausdruck kompilieren
615
28.2.7 Flags
615
28.2.8 Das Match-Objekt
617
28.3 Ein einfaches Beispielprogramm – Searching
618
28.4 Ein komplexeres Beispielprogramm – Matching
620
28.5 Kommentare in regulären Ausdrücken
623
28.6 Katastrophales Backtracking
624
28.6.1 Atomare Gruppen und possessive Quantoren
625
29 Schnittstellen zum Betriebssystem und zur Laufzeitumgebung
627
29.1 Funktionen des Betriebssystems – os
627
29.1.1 environ
628
29.1.2 getpid()
628
29.1.3 cpu_count()
628
29.1.4 system(cmd)
629
29.1.5 popen(command, [mode, buffering])
629
29.2 Starten von Subprozessen – subprocess
630
29.2.1 Einen Subprozess starten
630
29.2.2 Die Standardströme stdin, stdout und stderr
631
29.2.3 Der Return Code
632
29.2.4 Umgebungsvariablen
633
29.3 Zugriff auf die Laufzeitumgebung – sys
633
29.3.1 Kommandozeilenparameter
633
29.3.2 Standardpfade
634
29.3.3 Standardein- und -ausgabeströme
634
29.3.4 Das Programm beenden
634
29.3.5 Details zur Python-Version
635
29.3.6 Details zum Betriebssystem
636
29.3.7 Hooks
637
29.4 Kommandozeilenparameter – argparse
638
29.4.1 Taschenrechner – ein einfaches Beispiel
639
29.4.2 Ein komplexeres Beispiel
644
30 Das Dateisystem
647
30.1 Grundlegendes zu Dateisystemen und Pfaden
647
30.1.1 Pfadnamen
647
30.1.2 Dateinamen
648
30.1.3 Absolute und relative Pfade
648
30.1.4 Zugriffsrechte
648
30.2 Die moderne Lösung – pathlib
649
30.2.1 Die Klasse Path
650
30.2.2 Pfade kombinieren
650
30.2.3 Attribute eines Pfads
651
30.2.4 Pfadeigenschaften prüfen
651
30.2.5 Dateien lesen und schreiben
652
30.2.6 Dateien umbenennen
653
30.2.7 Dateien kopieren und verschieben
653
30.2.8 Dateien löschen
654
30.2.9 Verzeichnisse erstellen und löschen
654
30.2.10 Links
654
30.2.11 Globbing
655
30.3 Zugriff auf das Dateisystem mit os
656
30.3.1 access(path, mode)
658
30.3.2 chmod(path, mode)
659
30.3.3 listdir([path])
660
30.3.4 mkdir(path, [mode]) und makedirs(path, [mode])
660
30.3.5 remove(path)
661
30.3.6 removedirs(path)
661
30.3.7 rename(src, dst) und renames(old, new)
661
30.3.8 walk(top, [topdown, onerror])
662
30.4 Dateipfade – os.path
664
30.4.1 abspath(path)
665
30.4.2 basename(path)
666
30.4.3 commonprefix(list)
666
30.4.4 dirname(path)
666
30.4.5 join(path, *paths)
667
30.4.6 normcase(path)
667
30.4.7 split(path)
667
30.4.8 splitdrive(path)
668
30.4.9 splitext(path)
668
30.5 Zugriff auf das Dateisystem – shutil
668
30.5.1 Verzeichnis- und Dateioperationen
670
30.5.2 Archivoperationen
672
30.6 Temporäre Dateien – tempfile
674
30.6.1 tempfile.TempTemporaryFile([mode, buffering, encoding, newline, suffix, prefix, dir], {errors})
675
30.6.2 tempfile.TemporaryDirectory([suffix, prefix, dir])
676
31 Parallele Programmierung
677
31.1 Prozesse, Multitasking und Threads
677
31.1.1 Die Leichtgewichte unter den Prozessen – Threads
678
31.1.2 Das Global Interpreter Lock (GIL)
680
31.1.3 Threads oder Prozesse?
680
31.1.4 Kooperatives Multitasking
681
31.2 Pythons Schnittstellen zur Parallelisierung
682
31.3 Die abstrakte Schnittstelle – concurrent.futures
683
31.3.1 Ein Beispiel mit einem futures.ThreadPoolExecutor
683
31.3.2 Executor-Instanzen als Kontext-Manager
686
31.3.3 Die Verwendung von futures.ProcessPoolExecutor
686
31.3.4 Die Verwaltung der Aufgaben eines Executors
687
31.4 Die flexible Schnittstelle – threading und multiprocessing
694
31.4.1 Threads in Python – threading
694
31.4.2 Prozesse in Python – multiprocessing
704
31.5 Die kooperative Schnittstelle – asyncio
706
31.5.1 Kooperative Funktionen – Koroutinen
707
31.5.2 Erwartbare Objekte
708
31.5.3 Die Kooperation von Koroutinen – Tasks
709
31.5.4 Ein kooperativer Webcrawler
712
31.5.5 Blockierende Operationen in Koroutinen
720
31.5.6 Weitere asynchrone Sprachmerkmale
722
31.6 Fazit: Welche Schnittstelle ist die richtige?
725
31.6.1 Ist das kooperative Multitasking eine Option?
725
31.6.2 Abstraktion oder Flexibilität?
726
31.6.3 Threads oder Prozesse?
726
32 Datenspeicherung
727
32.1 Das Datenaustauschformat JSON – json
727
32.2 Serialisierung von Instanzen – pickle
729
32.2.1 Funktionale Schnittstelle
730
32.2.2 Objektorientierte Schnittstelle
731
32.3 Das Tabellenformat CSV – csv
733
32.3.1 reader-Objekte – Daten aus einer CSV-Datei lesen
733
32.3.2 Dialect-Objekte – eigene Dialekte verwenden
736
32.4 Komprimierte Dateien und Archive
739
32.4.1 gzip.open(filename, [mode, compresslevel])
739
32.4.2 Andere Module für den Zugriff auf komprimierte Daten
740
32.5 Datenbanken
741
32.5.1 Pythons eingebaute Datenbank – sqlite3
745
32.6 XML
761
32.6.1 ElementTree
763
32.6.2 SAX – Simple API for XML
771
33 Netzwerkkommunikation
777
33.1 Die Socket API
778
33.1.1 Client-Server-Systeme
779
33.1.2 UDP
782
33.1.3 TCP
783
33.1.4 Blockierende und nichtblockierende Sockets
785
33.1.5 Erzeugen eines Sockets
787
33.1.6 Die Socket-Klasse
788
33.1.7 Netzwerk-Byte-Order
791
33.1.8 Multiplexende Server – selectors
792
33.1.9 Objektorientierte Serverentwicklung – socketserver
795
33.2 XML-RPC
797
33.2.1 Der Server
798
33.2.2 Der Client
801
33.2.3 Multicall
803
33.2.4 Einschränkungen
804
34 Zugriff auf Ressourcen im Internet
807
34.1 Protokolle
807
34.1.1 Hypertext Transfer Protocol – HTTP
807
34.1.2 File Transfer Protocol – FTP
808
34.2 Lösungen
808
34.2.1 Veraltete Lösungen für Python 2
808
34.2.2 Lösungen der Standardbibliothek
808
34.2.3 Lösungen von Drittanbietern
809
34.3 Der einfache Weg – requests
809
34.3.1 Einfache Anfragen via GET und POST
809
34.3.2 Web-APIs
810
34.4 URLs – urllib
812
34.4.1 Zugriff auf entfernte Ressourcen – urllib.request
813
34.4.2 Das Einlesen und Verarbeiten von URLs – urllib.parse
816
34.5 FTP – ftplib
820
34.5.1 Mit einem FTP-Server verbinden
821
34.5.2 FTP-Kommandos ausführen
822
34.5.3 Mit Dateien und Verzeichnissen arbeiten
823
34.5.4 Übertragen von Dateien
824
35 E-Mail
829
35.1 SMTP – smtplib
829
35.1.1 SMTP([host, port, local_hostname, timeout, source_address])
830
35.1.2 Eine Verbindung aufbauen und beenden
831
35.1.3 Eine E-Mail versenden
831
35.1.4 Beispiel
832
35.2 POP3 – poplib
832
35.2.1 POP3(host, [port, timeout])
833
35.2.2 Eine Verbindung aufbauen und beenden
834
35.2.3 Vorhandene E-Mails auflisten
834
35.2.4 E-Mails abrufen und löschen
835
35.2.5 Beispiel
836
35.3 IMAP4 – imaplib
837
35.3.1 IMAP4([host, port, timeout])
838
35.3.2 Eine Verbindung aufbauen und beenden
838
35.3.3 Eine Mailbox suchen und auswählen
839
35.3.4 Operationen mit Mailboxen
840
35.3.5 E-Mails suchen
840
35.3.6 E-Mails abrufen
841
35.3.7 Beispiel
842
35.4 Erstellen komplexer E-Mails – email
843
35.4.1 Eine einfache E-Mail erstellen
843
35.4.2 Eine E-Mail mit Anhängen erstellen
844
35.4.3 Eine E-Mail einlesen
846
36 Debugging und Qualitätssicherung
847
36.1 Der Debugger
847
36.2 Automatisiertes Testen
850
36.2.1 Testfälle in Docstrings – doctest
850
36.2.2 Unit Tests – unittest
855
36.3 Analyse des Laufzeitverhaltens
858
36.3.1 Laufzeitmessung – timeit
859
36.3.2 Profiling – cProfile
862
36.3.3 Tracing – trace
866
37 Dokumentation
869
37.1 Docstrings
869
37.2 Automatisches Erstellen einer Dokumentation – pydoc
871
TEIL V Weiterführende Themen
873
38 Distribution von Python-Projekten
875
38.1 Eine Geschichte der Distributionen in Python
875
38.1.1 Der klassische Ansatz – distutils
876
38.1.2 Der neue Standard – setuptools
876
38.1.3 Der Paketindex – PyPI
877
38.2 Erstellen von Distributionen – setuptools
877
38.2.1 Installation
877
38.2.2 Schreiben des Moduls
878
38.2.3 Das Installationsskript
879
38.2.4 Erstellen einer Quellcodedistribution
884
38.2.5 Erstellen einer Binärdistribution
884
38.2.6 Distributionen installieren
885
38.3 Erstellen von EXE-Dateien – cx_Freeze
886
38.3.1 Installation
886
38.3.2 Anwendung
887
38.4 Paketmanager
888
38.4.1 Der Python-Paketmanager – pip
888
38.4.2 Der Paketmanager conda
890
38.5 Lokalisierung von Programmen – gettext
893
38.5.1 Beispiel für die Verwendung von gettext
894
38.5.2 Erstellen des Sprachkompilats
895
39 Virtuelle Umgebungen
899
39.1 Das Arbeiten mit virtuellen Umgebungen – venv
900
39.1.1 Eine virtuelle Umgebung aktivieren
900
39.1.2 In einer virtuellen Umgebung arbeiten
900
39.1.3 Eine virtuelle Umgebung deaktivieren
901
39.2 Virtuelle Umgebungen in Anaconda
901
40 Alternative Interpreter und Compiler
903
40.1 Just-in-Time-Kompilierung – PyPy
903
40.1.1 Installation und Verwendung
904
40.1.2 Beispiel
904
40.2 Numba
905
40.2.1 Installation
905
40.2.2 Beispiel
906
40.3 Anbindung an C und C++ – Cython
907
40.3.1 Installation
907
40.3.2 Die Funktionsweise von Cython
908
40.3.3 Ein Cython-Programm kompilieren
909
40.3.4 Ein Cython-Programm mit statischer Typisierung
911
40.3.5 Eine C-Bibliothek verwenden
912
40.4 Die interaktive Python-Shell – IPython
914
40.4.1 Installation
915
40.4.2 Die interaktive Shell
915
40.4.3 Das Jupyter Notebook
918
41 Grafische Benutzeroberflächen
923
41.1 Toolkits
923
41.1.1 Tkinter (Tk)
924
41.1.2 PyGObject (Gtk)
924
41.1.3 Qt for Python (Qt)
924
41.1.4 wxPython (wxWidgets)
925
41.2 Einführung in tkinter
925
41.2.1 Ein einfaches Beispiel
926
41.2.2 Steuerelementvariablen
928
41.2.3 Der Packer
930
41.2.4 Events
935
41.2.5 Steuerelemente
941
41.2.6 Zeichnungen – das Canvas-Widget
961
41.2.7 Weitere Module
969
41.3 Einführung in PySide6
972
41.3.1 Installation
973
41.3.2 Grundlegende Konzepte von Qt
973
41.3.3 Der Entwicklungsprozess
975
41.3.4 Signale und Slots
982
41.3.5 Wichtige Widgets
985
41.3.6 Die Zeichenfunktionalität von Qt
992
41.3.7 Die Model-View-Architektur
1005
42 Python als serverseitige Programmiersprache im WWW – ein Einstieg in Django
1021
42.1 Konzepte und Besonderheiten von Django
1022
42.2 Installation von Django
1023
42.3 Ein neues Django-Projekt erstellen
1024
42.3.1 Der Entwicklungswebserver
1026
42.3.2 Konfiguration des Projekts
1027
42.4 Eine Applikation erstellen
1028
42.4.1 Die Applikation in das Projekt einbinden
1030
42.4.2 Ein Model definieren
1031
42.4.3 Beziehungen zwischen Models
1032
42.4.4 Übertragung des Models in die Datenbank
1032
42.4.5 Die Model-API
1034
42.4.6 Unser Projekt bekommt ein Gesicht
1039
42.4.7 Djangos Template-System
1046
42.4.8 Verarbeitung von Formulardaten
1059
42.4.9 Djangos Administrationsoberfläche
1062
43 Wissenschaftliches Rechnen und Data Science
1069
43.1 Installation
1070
43.2 Das Modellprogramm
1071
43.2.1 Der Import von numpy, scipy und matplotlib
1072
43.2.2 Vektorisierung und der Datentyp numpy.ndarray
1073
43.2.3 Visualisieren von Daten mit matplotlib.pyplot
1077
43.3 Überblick über die Module numpy und scipy
1080
43.3.1 Überblick über den Datentyp numpy.ndarray
1080
43.3.2 Überblick über scipy
1088
43.4 Eine Einführung in die Datenanalyse mit pandas
1090
43.4.1 Das DataFrame-Objekt
1091
43.4.2 Selektiver Datenzugriff
1093
43.4.3 Löschen von Zeilen und Spalten
1098
43.4.4 Einfügen von Zeilen und Spalten
1099
43.4.5 Logische Ausdrücke auf Datensätzen
1100
43.4.6 Manipulation von Datensätzen
1101
43.4.7 Ein- und Ausgabe
1103
43.4.8 Visualisierung
1104
44 Insiderwissen
1107
44.1 URLs im Standardbrowser öffnen – webbrowser
1107
44.1.1 open(url, [new, autoraise])
1107
44.2 Interpretieren von Binärdaten – struct
1107
44.3 Versteckte Passworteingabe – getpass
1110
44.3.1 getpass([prompt, stream], {echo_char})
1110
44.3.2 getpass.getuser()
1110
44.4 Kommandozeilen-Interpreter – cmd
1110
44.5 Dateiinterface für Strings – io.StringIO
1113
44.6 Kopieren von Instanzen – copy
1114
44.6.1 Zurück zum Eingangsbeispiel
1117
44.7 Bildverarbeitung – Pillow
1118
44.7.1 Installation
1118
44.7.2 Bilddateien laden und speichern
1119
44.7.3 Zugriff auf einzelne Pixel
1120
44.7.4 Manipulation von Bildern
1120
44.7.5 Interoperabilität
1127
45 Eine Geschichte der Python-Versionen
1129
45.1 Die Versionshistorie
1129
45.2 Der Sprung nach Python 3
1132
45.2.1 Ein-/Ausgabe
1133
45.2.2 Iteratoren
1134
45.2.3 Strings
1135
45.2.4 Ganze Zahlen
1136
45.2.5 Exception Handling
1137
45.2.6 Standardbibliothek
1137
Anhang
1139
A.1 Reservierte Wörter
1139
A.2 Operatorrangfolge
1139
A.3 Eingebaute Funktionen
1141
A.4 Eingebaute Exceptions
1145
A.5 Python-IDEs
1150
A.5.1 PyCharm
1150
A.5.2 Visual Studio Code
1150
A.5.3 Spyder
1151
Index
1153