Einführung in Python 3 - Für Ein- und Umsteiger

Bernd Klein

Einführung in Python 3

Für Ein- und Umsteiger

2017

555 Seiten

Format: PDF

E-Book: €  19,99

E-Book kaufen

E-Book kaufen

ISBN: 9783446453876

 

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-2019 ciando GmbH