Bernd Klein
Einführung in Python 3
Für Ein- und Umsteiger
Inhalt
6
Vorwort
18
Danksagung
19
1 Einleitung
20
1.1 Einfach und schnell zu lernen
20
1.2 Zielgruppe des Buches
20
1.3 Aufbau des Buches
21
1.4 Programmieren lernen ,,interaktiv''
22
1.5 Download der Beispiele und Hilfe
23
1.6 Anregungen und Kritik
23
Teil I Grundlagen
24
2 Kommandos und Programme
26
2.1 Erste Schritte mit Python
26
2.1.1 Linux
26
2.1.2 Windows
27
2.1.3 macOS
28
2.2 Herkunft und Bedeutung des Begriffes interaktive Shell
28
2.2.1 Erste Schritte in der interaktiven Shell
29
2.3 Verlassen der Python-Shell
30
2.4 Benutzung von Variablen
31
2.5 Mehrzeilige Anweisungen in der interaktiven Shell
31
2.6 Programme schreiben oder schnell mal der Welt ``Hallo'' sagen
32
3 Bytecode und Maschinencode
36
3.1 Einführung
36
3.2 Unterschied zwischen Programmier- und Skriptsprachen
36
3.3 Interpreter- oder Compilersprache
36
4 Datentypen und Variablen
40
4.1 Einführung
40
4.2 Variablennamen
42
4.2.1 Gültige Variablennamen
42
4.2.2 Konventionen für Variablennamen
43
4.3 Datentypen
43
4.3.1 Ganze Zahlen
43
4.3.2 Fließkommazahlen
45
4.3.3 Zeichenketten
45
4.3.4 Boolesche Werte
45
4.3.5 Komplexe Zahlen
46
4.3.6 Operatoren
46
4.4 Statische und dynamische Typdeklaration
47
4.5 Typumwandlung
49
4.6 Datentyp ermitteln
50
5 Sequentielle Datentypen
52
5.1 Übersicht
52
5.1.1 Zeichenketten oder Strings
53
5.1.2 Listen
55
5.1.3 Tupel
55
5.2 Indizierung von sequentiellen Datentypen
56
5.3 Teilbereichsoperator
57
5.4 Die len-Funktion
59
5.5 Aufgaben
60
6 Dictionaries
62
6.1 Dictionaries und assoziative Felder
62
6.2 Definition und Benutzung
63
6.3 Fehlerfreie Zugriffe auf Dictionaries
65
6.4 Zulässige Typen für Schlüssel und Werte
66
6.5 Verschachtelte Dictionaries
67
6.6 Methoden auf Dictionaries
67
6.7 Operatoren
71
6.8 Die zip-Funktion
71
6.9 Dictionaries aus Listen erzeugen
73
6.10 Aufgaben
74
7 Mengen
76
7.1 Übersicht
76
7.2 Mengen in Python
76
7.2.1 Sets erzeugen
77
7.2.2 Mengen von unveränderlichen Elementen
77
7.3 Frozensets
78
7.4 Operationen auf ,,set''-Objekten
78
7.4.1 add(element)
78
7.4.2 clear()
79
7.4.3 copy
79
7.4.4 difference()
79
7.4.5 difference_update()
80
7.4.6 discard(el)
80
7.4.7 remove(el)
81
7.4.8 intersection(s)
81
7.4.9 isdisjoint()
81
7.4.10 issubset()
82
7.4.11 issuperset()
82
7.4.12 pop()
83
8 Eingaben
84
8.1 Eingabe mittels input
84
9 Verzweigungen
86
9.1 Anweisungsblöcke und Einrückungen
86
9.2 Bedingte Anweisungen in Python
89
9.2.1 Einfachste if-Anweisung
89
9.2.2 if-Anweisung mit else-Zweig
90
9.2.3 elif-Zweige
90
9.3 Vergleichsoperatoren
91
9.4 Zusammengesetzte Bedingungen
91
9.5 Wahr oder falsch: Bedingungen in Verzweigungen
91
9.6 Aufgaben
92
10 Schleifen
94
10.1 Übersicht
94
10.2 while-Schleife
95
10.3 break und continue
96
10.4 die Alternative im Erfolgsfall: else
97
10.5 For-Schleife
99
10.6 Aufgaben
102
11 Dateien lesen und schreiben
106
11.1 Dateien
106
11.2 Text aus einer Datei lesen
106
11.3 Schreiben in eine Datei
108
11.4 In einem Rutsch lesen: readlines und read
108
11.5 with-Anweisung
109
11.6 Aufgaben
110
12 Formatierte Ausgabe und Strings formatieren
112
12.1 Wege, die Ausgabe zu formatieren
112
12.2 print-Funktion
112
12.3 Stringformatierung im C-Stil
114
12.4 Der pythonische Weg: Die String-Methode ,,format''
118
12.5 Benutzung von Dictionaries beim Aufruf der ,,format''-Methode
121
12.6 Benutzung von lokalen Variablen in ,,format''
122
12.7 Formatierte Stringliterale
123
12.8 Weitere String-Methoden zum Formatieren
123
13 Flaches und tiefes Kopieren
126
13.1 Einführung
126
13.2 Kopieren einer Liste
127
13.3 Flache Kopien
129
13.4 Kopieren mit deepcopy
130
13.5 Deepcopy für Dictionaries
131
14 Funktionen
132
14.1 Allgemein
132
14.2 Funktionen
132
14.3 Docstring
134
14.4 Standardwerte für Funktionen
136
14.5 Schlüsselwortparameter
137
14.6 Funktionen ohne oder mit leerer return-Anweisung
137
14.7 Mehrere Rückgabewerte
138
14.8 Lokale und globale Variablen in Funktionen
139
14.9 Parameterübergabe im Detail
141
14.10 Effekte bei veränderlichen Objekten
143
14.11 Kommandozeilenparameter
144
14.12 Variable Anzahl von Parametern / Variadische Funktionen
145
14.13 * in Funktionsaufrufen
147
14.14 Beliebige Schlüsselwortparameter
148
14.15 Doppeltes Sternchen im Funktionsaufruf
148
14.16 Aufgaben
149
15 Rekursive Funktionen
152
15.1 Definition und Herkunft des Begriffs
152
15.2 Definition der Rekursion
153
15.3 Rekursive Funktionen in Python
153
15.4 Die Tücken der Rekursion
154
15.5 Fibonacci-Folge in Python
155
15.6 Aufgaben
159
16 Listen und Tupel im Detail
162
16.1 Stapelspeicher
162
16.2 Stapelverarbeitung in Python: pop und append
163
16.3 extend
163
16.4 ,+'-Operator oder append
164
16.5 Entfernen eines Wertes
166
16.6 Prüfen, ob ein Element in Liste enthalten ist
166
16.7 Finden der Position eines Elementes
166
16.8 Einfügen von Elementen
167
16.9 Besonderheiten bei Tupel
167
16.9.1 Leere Tupel
168
16.9.2 1-Tupel
168
16.9.3 Mehrfachzuweisungen, Packing und Unpacking
168
16.10 Die veränderliche Unveränderliche
170
16.11 Sortieren von Listen
170
16.11.1 ,,sort'' und ,,sorted''
170
16.11.2 Umkehrung der Sortierreihenfolge
171
16.11.3 Eigene Sortierfunktionen
171
16.12 Aufgaben
174
17 Modularisierung
176
17.1 Module
176
17.1.1 Namensräume von Modulen
177
17.1.2 Namensräume umbenennen
178
17.1.3 Modularten
178
17.1.4 Suchpfad für Module
179
17.1.5 Inhalt eines Modules
180
17.1.6 Eigene Module
180
17.1.7 Dokumentation für eigene Module
181
17.2 Pakete
182
17.2.1 Einfaches Paket erzeugen
183
17.2.2 Komplexeres Paket
184
17.2.3 Komplettes Paket importieren
187
18 Globale und lokale Variablen
190
18.1 Einführung
190
18.2 Globale und lokale Variablen in Funktionen
191
19 Alles über Strings …
194
19.1 ... fast alles
194
19.2 Aufspalten von Zeichenketten
195
19.2.1 split
195
19.2.2 Standardverhalten und ,,maxsplit''
197
19.2.3 rsplit
198
19.2.4 Folge von Trennzeichen
200
19.2.5 splitlines
201
19.2.6 partition
202
19.3 Zusammenfügen von Stringlisten mit join
202
19.4 Suchen von Teilstrings
202
19.4.1 ,,in'' oder ,,not in''
202
19.4.2 s.find(substring[, start[, end]])
203
19.4.3 s.rfind(substring[, start[, end]])
203
19.4.4 s.index(substring[, start[, end]])
204
19.4.5 s.rindex(substring[, start[, end]])
204
19.4.6 s.count(substring[, start[, end]])
204
19.5 Suchen und Ersetzen
205
19.6 Nur noch Kleinbuchstaben oder Großbuchstaben
205
19.7 capitalize und title
205
19.8 Stripping Strings
206
19.9 Strings ausrichten
206
19.10 String-Tests
207
19.11 Aufgaben
209
20 Ausnahmebehandlung
212
20.1 Abfangen mehrerer Exceptions
214
20.2 except mit mehrfachen Ausnahmen
215
20.3 Die optionale else-Klausel
215
20.4 Fehlerinformationen über sys.exc_info
216
20.5 Exceptions generieren
216
20.6 Finalisierungsaktion
217
Teil II Objektorientierte Programmierung
218
21 Grundlegende Aspekte
220
21.1 Bibliotheksvergleich
220
21.2 Objekte und Instanzen einer Klasse
222
21.3 Kapselung von Daten und Methoden
223
21.4 Eine minimale Klasse in Python
223
21.5 Eigenschaften und Attribute
224
21.6 Methoden
227
21.7 Instanzvariablen
228
21.8 Die __init__-Methode
228
21.9 Destruktor
230
21.10 Datenkapselung, Datenabstraktion und Geheimnisprinzip
231
21.10.1 Definitionen
231
21.10.2 Zugriffsmethoden
233
21.10.3 Properties
234
21.10.4 Public-, Protected- und Private-Attribute
236
21.10.5 Weitere Möglichkeiten der Properties
237
21.10.6 Properties mit Dekorateuren
240
21.11 Die __str__- und die __repr__-Methode
241
21.12 Klassenattribute
246
21.13 Statische Methoden
248
21.13.1 Einleitendes Beispiel
249
21.13.2 Getter und Setter für private Klassenattribute
250
21.14 Public-Attribute statt private Attribute
251
21.15 Magische Methoden und Operatorüberladung
252
21.15.1 Einführung
252
21.15.2 Übersicht magische Methoden
254
21.15.3 Beispielklasse: Length
255
22 Bruchklasse
260
22.1 Brüche à la 1001 Nacht
260
22.2 Zurück in die Gegenwart
261
22.3 Rechenregeln
263
22.3.1 Multiplikation von Brüchen
263
22.3.2 Division von Brüchen
264
22.3.3 Addition von Brüchen
265
22.3.4 Subtraktion von Brüchen
265
22.3.5 Vergleichsoperatoren
266
22.4 Integer plus Bruch
266
22.4.1 Die Bruchklasse im Überblick
267
22.5 Fraction-Klasse
269
23 Vererbung
270
23.1 Oberbegriffe und Oberklassen
270
23.2 Ein einfaches Beispiel
271
23.3 Überladen, Überschreiben und Polymorphie
272
23.4 Vererbung in Python
275
23.5 Klassenmethoden
278
23.6 Standardklassen als Basisklassen
280
24 Mehrfachvererbung
282
24.1 Einführung
282
24.2 Beispiel: CalendarClock
283
24.3 Diamand-Problem oder ,,deadly diamond of death''
291
24.4 super und MRO
292
25 Slots
298
25.1 Erzeugung von dynamischen Attributen verhindern
298
26 Dynamische Erzeugung von Klassen
300
26.1 Beziehung zwischen ,,class'' und ,,type''
300
27 Metaklassen
304
27.1 Motivation
304
27.2 Definition
309
27.3 Definition von Metaklassen in Python
309
27.4 Singletons mit Metaklassen erstellen
311
27.5 Beispiel – Methodenaufrufe zählen
312
27.5.1 Einführung
312
27.5.2 Vorbereitungen
312
27.5.3 Ein Dekorateur, um Funktionsaufrufe zu zählen
314
27.5.4 Die Metaklasse ,,Aufrufzähler''
314
28 Abstrakte Klassen
316
29 Aufgaben
320
Teil III Fortgeschrittenes Python
324
30 lambda, map, filter und reduce
326
30.1 lambda
326
30.2 map
329
30.3 Filtern von sequentiellen Datentypen mittels ,,filter''
331
30.4 reduce
332
30.5 Aufgaben
333
31 Listen-Abstraktion/List Comprehension
334
31.1 Die Alternative zu Lambda und Co.
334
31.2 Syntax
335
31.3 Weitere Beispiele
335
31.4 Die zugrunde liegende Idee
336
31.5 Anspruchsvolleres Beispiel
337
31.6 Mengen-Abstraktion
337
31.7 Rekursive Primzahlberechnung
338
31.8 Generatoren-Abstraktion
338
31.9 Aufgaben
339
32 Generatoren und Iteratoren
342
32.1 Einführung
342
32.2 Iteration in for-Schleifen
342
32.3 Generatoren
344
32.4 Generatoren zähmen mit firstn und islice
346
32.5 Beispiele
347
32.5.1 Permutationen
347
32.5.2 Variationen und Kombinationen
348
32.6 Generator-Ausdrücke
350
32.7 return-Anweisungen in Generatoren
351
32.8 send-Methode / Koroutinen
351
32.9 Die throw-Methode
353
32.10 Dekoration von Generatoren
355
32.11 yield from
356
32.12 Aufgaben
358
33 Dekorateure
360
33.1 Einführung Dekorateure
360
33.1.1 Verschachtelte Funktionen
361
33.1.2 Funktionen als Parameter
362
33.1.3 Funktionen als Rückgabewert
363
33.1.4 Fabrikfunktionen
364
33.2 Ein einfacher Dekorateur
365
33.3 @-Syntax für Dekorateure
366
33.4 Anwendungsfälle für Dekorateure
369
33.4.1 Überprüfung von Argumenten durch Dekorateure
369
33.4.2 Funktionsaufrufe mit einem Dekorateur zählen
370
33.5 Dekorateure mit Parametern
371
33.6 Benutzung von Wraps aus functools
373
33.7 Klassen statt Funktionen
374
33.7.1 Die __call__-Methode
374
33.8 Eine Klasse als Dekorateur benutzen
376
33.9 Memoisation
377
33.9.1 Bedeutung und Herkunft des Begriffs
377
33.9.2 Memoisation mit Dekorateur-Funktionen
377
33.9.3 Memoisation mit einer Klasse
378
33.9.4 Memoisation mit functools.lru_cache
379
Teil IV Weiterführende Themen
382
34 Tests und Fehler
384
34.1 Einführung
384
34.2 Modultests
386
34.3 Modultests unter Benutzung von __name__
387
34.4 doctest-Modul
389
34.5 Testgetriebene Entwicklung oder ,,Im Anfang war der Test''
392
34.6 unittest
394
34.7 Methoden der Klasse TestCase
396
34.8 Aufgaben
399
35 Daten konservieren
400
35.1 Persistente Speicherung
400
35.2 Pickle-Modul
401
35.2.1 Daten ,,einpökeln'' mit pickle.dump
401
35.2.2 pickle.load
402
35.3 Ein persistentes Dictionary mit shelve
402
36 Reguläre Ausdrücke
406
36.1 Ursprünge und Verbreitung
406
36.2 Stringvergleiche
406
36.3 Überlappungen und Teilstrings
408
36.4 Das re-Modul
408
36.5 Matching-Problem
409
36.6 Syntax der regulären Ausdrücke
411
36.6.1 Beliebiges Zeichen
411
36.7 Zeichenauswahl
412
36.8 Endliche Automaten
413
36.9 Anfang und Ende eines Strings
413
36.10 Vordefinierte Zeichenklassen
416
36.11 Optionale Teile
417
36.12 Quantoren
418
36.13 Gruppierungen und Rückwärtsreferenzen
420
36.13.1 Match-Objekte
420
36.14 Umfangreiche Übung
423
36.15 Alles finden mit findall
425
36.16 Alternativen
426
36.17 Compilierung von regulären Ausdrücken
426
36.18 Aufspalten eines Strings mit oder ohne regulären Ausdruck
428
36.18.1 split-Methode der String-Klasse
428
36.18.2 split-Methode des re-Moduls
429
36.18.3 Wörter filtern
431
36.19 Suchen und Ersetzen mit sub
432
36.20 Aufgaben
433
37 Typanmerkungen
436
37.1 Einführung
436
37.2 Einfaches Beispiel
437
37.3 Variablenanmerkungen
438
37.4 Listenbeispiel
439
37.5 typing-Modul
440
38 Systemprogrammierung
444
38.1 Systemprogrammierung
444
38.2 Häufig falsch verstanden: Shell
444
38.3 os-Modul
445
38.3.1 Vorbemerkungen
446
38.3.2 Umgebungsvariablen
446
38.3.3 Dateiverarbeitung auf niedrigerer Ebene
448
38.3.4 Die exec-,,Familie''
453
38.3.5 Weitere Funktionen im Überblick
460
38.3.6 os.path - Arbeiten mit Pfaden
474
38.4 shutil-Modul
482
39 Forks
488
39.1 Fork
488
39.2 Fork in Python
488
Teil V Lösungen zu den Aufgaben
492
40 Lösungen zu den Aufgaben
494
40.1 Lösungen zu Kapitel 5 (Sequentielle Datentypen)
494
40.2 Lösungen zu Kapitel 6 (Dictionaries)
497
40.3 Lösungen zu Kapitel 9 (Verzweigungen)
499
40.4 Lösungen zu Kapitel 10 (Schleifen)
501
40.5 Lösungen zu Kapitel 11 (Dateien lesen und schreiben)
504
40.6 Lösungen zu Kapitel 16 (Listen und Tupel im Detail)
506
40.7 Lösungen zu Kapitel 14 (Funktionen)
509
40.8 Lösungen zu Kapitel 15 (Rekursive Funktionen)
514
40.9 Lösungen zu Kapitel 19 (Alles über Strings …)
518
40.10 Lösungen zu Kapitel 21 (Grundlegende Aspekte)
521
40.11 Lösungen zu Kapitel 34 (Tests und Fehler)
531
40.12 Lösungen zu Kapitel 36 (Reguläre Ausdrücke)
531
40.13 Lösungen zu Kapitel 30 (lambda, map, filter und reduce)
537
40.14 Lösungen zu Kapitel 31 (Listen-Abstraktion/List Comprehension)
538
40.15 Lösungen zu Kapitel 32 (Generatoren und Iteratoren)
539
Stichwortverzeichnis
544
© 2009-2024 ciando GmbH