Inhalt Vorwort (11) 1. Algorithmen und Datenstrukturen (15) - 1.1. Extrahieren von Sequenzen in separate Variablen
- 1.2. Extrahieren von Elementen aus iterierbaren Objekten beliebiger Länge (16)
- 1.3. Speichern der letzten N Elemente (19)
- 1.4. Suche nach dem N größten oder kleinsten Element (20)
- 1.5. Erstellen einer Prioritätswarteschlange 22
- 1.6. Zuordnung von Schlüsseln zu verschiedenen Wörterbuchwerten (24)
- 1.7. Bestimmung der Reihenfolge in Wörterbüchern (25)
- 1.8. Berechnungen mit den Daten aus Wörterbüchern (26)
- 1.9. Suchen nach identischen Daten in zwei Wörterbüchern (28)
- 1.10. Entfernen von Wiederholungen aus Sequenzen unter Beibehaltung der Reihenfolge der Elemente (29)
- 1.11. Namensclips (30)
- 1.12. Identifizieren der häufigsten Elemente in einer Sequenz (31)
- 1.13. Wörterbuchlisten nach gemeinsamen Schlüsseln sortieren (33)
- 1.14. Sortieren von Objekten ohne integrierte Vergleichsunterstützung
- 1.15. Gruppieren von Datensätzen basierend auf einem Feldwert 35
- 1.16. Filtern Sie die Elemente einer Sequenz
- 1.17. Abrufen einer Teilmenge eines Wörterbuchs
- 1.18. Zuordnung von Namen zu Sequenzelementen 40
- 1.19. Gleichzeitige Datentransformation und -reduktion 42
- 1.20. Kombinieren mehrerer Mappings zu einem (43)
2. Zeichenfolgen und Text (47) - 2.1. Aufteilen von Zeichenfolgen, wenn eines der verschiedenen Trennzeichen erkannt wird (47)
- 2.2. Abgleichen von Text mit dem Anfangs- oder Endteil einer Zeichenfolge 48
- 2.3. Abgleich von Zeichenketten mit Shell-Wildcards 50
- 2.4. Textmusterabgleich und Suche 51
- 2.5. Text suchen und ersetzen (54)
- 2.6. Suchen und Ersetzen von Text ohne Berücksichtigung der Groß-/Kleinschreibung (55)
- 2.7. Erstellen regulärer Ausdrücke für die kürzeste Übereinstimmung 56
- 2.8. Erstellen Sie reguläre Ausdrücke, um mehrzeilige Muster zu finden 57
- 2.9. Konvertieren von Unicode-Text in Standardform 58
- 2.10. Verwenden von Unicode-Zeichen in regulären Ausdrücken 60
- 2.11. Unerwünschte Zeichen aus Zeichenfolgen entfernen 61
- 2.12. Korrektheit sicherstellen und Text bestellen (62)
- 2.13. Saiten ausrichten 64
- 2.14. Saiten kombinieren 66
- 2.15. Ersetzen von Werten für Variablen in Strings 68
- 2.16. Text formatieren, um eine bestimmte Anzahl von Spalten zu erhalten 70
- 2.17. Umgang mit HTML- und XML-Entitäten in Text 71
- 2.18. Text in Tokens aufteilen (73)
- 2.19. Erstellen eines einfachen rekursiven Down-Top-Parsers
- 2.20. Durchführen von Textoperationen an Byte-Strings
3. Zahlen, Daten und Uhrzeit (87) - 3.1. Zahlen runden (87)
- 3.2. Genaue Dezimalzahlen ausführen 88
- 3.3. Formatzahlen für Anzeige 90
- 3.4. Verwenden von binären, oktalen und hexadezimalen Ganzzahlen 92
- 3.5. Packen in Bytes und Extrahieren großer Ganzzahlen aus Bytes 93
- 3.6. Berechnungen mit komplexen Zahlen durchführen 95
- 3.7. Infinity- und NaN-Werte (96)
- 3.8. Rechnen mit Brüchen 98
- 3.9. Rechnen mit großen Zahlenfeldern 99
- 3.10. Durchführen von Matrix- und Bereichsoperationen 102
- 3.11. Artikel zufällig herunterladen (103)
- 3.12. Umrechnung von Tagen in Sekunden und andere grundlegende zeitbezogene Umrechnungen 105
- 3.13. Angabe des letzten Freitagdatums 107
- 3.14. Festlegen eines Datumsbereichs, der dem aktuellen Monat entspricht 108
- 3.15. Konvertieren von Strings in Datetime-Objekte 110
- 3.16. Manipulation von Daten in Bezug auf Zeitzonen (111)
4. Iteratoren und Generatoren (113) - 4.1. Manuell mit einem Iterator
- 4.2. Delegieren des Iterationsprozesses 114
- 4.3. Erstellen neuer Iterationsmuster mit Generatoren 115
- 4.4. Implementieren eines Iteratorprotokolls 117
- 4.5. Rückwärts iterieren 119
- 4.6. Definieren zusätzlicher Zustandsgeneratorfunktionen 120
- 4.7. Abrufen von Datensegmenten, die von einem Iterator zurückgegeben werden
- 4.8. Überspringen des ersten Teils eines iterierbaren Objekts 122
- 4.9. Iteration über alle möglichen Kombinationen oder Permutationen 124
- 4.10. Index - Sequenzwertpaarung 125
- 4.11. Gleichzeitiges Durchlaufen mehrerer Sequenzen 127
- 4.12. Navigieren durch Elemente aus separaten Containern 129
- 4.13. Erstellen von Datenverarbeitungspipelines 130
- 4.14. Verschachtelte Sequenzen in eine Dimension umwandeln 133
- 4.15. Zusammengeführte sortierte iterierbare Objekte entsprechend der Sortierreihenfolge durchlaufen 134
- 4.16. Unendliche While-Schleifen durch einen Iterator ersetzen 135
5. Dateien und E / A - 5.1. Lesen und Schreiben von Textdaten (137)
- 5.2. Daten von print() in eine Datei speichern 139
- 5.3. Verwenden von benutzerdefinierten Trennzeichen oder Zeilenende in einer Druckfunktion () 140
- 5.4. Lesen und Schreiben von Binärdaten (141)
- 5.5. Schreiben von Daten in eine Datei, die nicht existiert 142
- 5.6. I/O auf Strings ausführen 143
- 5.7. Lesen und Schreiben komprimierter Datendateien 144
- 5.8. Sich durch Datensätze mit fester Größe bewegen 145
- 5.9. Lesen von Binärdaten in einen Variablenpuffer 146
- 5.10. Zuordnen von Binärdateien zum Speicher 148
- 5.11. Manipulieren von Pfaden 150
- 5.12. Prüfen, ob eine Datei existiert 151
- 5.13. Herunterladen einer Verzeichnisliste
- 5.14. Ignorieren der Dateinamenkodierung 153
- 5.15. Anzeige ungültiger Dateinamen
- 5.16. Hinzufügen oder Ändern der Kodierung einer geöffneten Datei
- 5.17. Bytes in eine Textdatei schreiben 158
- 5.18. Platzieren eines vorhandenen Dateideskriptors in einem Dateiobjekt
- 5.19. Temporäre Dateien und Verzeichnisse erstellen
- 5.20. Kommunikation mit seriellen Ports
- 5.21. Python-Objekte serialisieren 163
6. Datenverschlüsselung und -verarbeitung (167) - 6.1. Laden und Schreiben von CSV-Daten 167
- 6.2. Lesen und Schreiben von Daten im JSON-Format 170
- 6.3. Parsen einfacher XML-Daten 174
- 6.4. Progressives Parsen sehr großer XML-Dateien
- 6.5. Konvertieren von Wörterbüchern in XML 179
- 6.6. Analysieren, Ändern und Umschreiben von XML-Dokumenten 181
- 6.7. Analysieren von XML-Dokumenten mit Namespaces 183
- 6.8. Kommunikation mit relationalen Datenbanken 185
- 6.9. Hex-Decodierung und -Codierung (187)
- 6.10. Dekodieren und kodieren Sie Base64-Werte 188
- 6.11. Lesen und Schreiben von binären Arrays, die Strukturen enthalten 188
- 6.12. Laden verschachtelter binärer Strukturen variabler Länge 192
- 6.13. Daten zusammenfassen und Statistiken berechnen
7. Funktionen (203) - 7.1. Schreiben von Funktionen, die eine beliebige Anzahl von Argumenten annehmen 203
- 7.2. Funktionen erstellen, die Argumente annehmen, die nur mit Schlüsselwörtern übergeben werden 204
- 7.3. Anhängen von Metadaten mit Informationen an Funktionsargumente 205
- 7.4. Rückgabe mehrerer Werte durch Funktionen
- 7.5. Definieren einer Funktion mit Standardargumenten 207
- 7.6. Anonyme (Inline-)Funktionen definieren 210
- 7.7. Abrufen von Variablenwerten in anonymen Funktionen
- 7.8. Ausführen eines N-Arguments mit weniger Argumenten
- 7.9. Klassen mit einer Methode durch Funktionen ersetzen 215
- 7.10. Zusätzlicher Status in Callback-Funktionen 216
- 7.11. Inline-Schreiben von Callback-Funktionen 219
- 7.12. Zugriff auf Variablen, die in einer Closure definiert sind
8. Klassen und Objekte 225 - 8.1. Ändern der Textdarstellung von Objekten 225
- 8.2. Ändern der Zeichenfolgenformatierung 226
- 8.3. Hinzufügen eines Kontextverwaltungsprotokolls zu Objekten 228
- 8.4. Reduzieren des Speicherverbrauchs beim Erstellen einer großen Anzahl von Objekten 230
- 8.5. Einkapseln von Namen in einer Klasse
- 8.6. Verwaltete Attribute erstellen 232
- 8.7. Aufrufen von Basisklassenmethoden 236
- 8.8. Erweitern einer Eigenschaft in einer abgeleiteten Klasse 240
- 8.9. Erstellen einer neuen Art von Klassen- oder Instanzattributen 243
- 8.10. Anwenden von faul berechneten Eigenschaften 246
- 8.11. Vereinfachung der Initialisierung von Datenstrukturen 248
- 8.12. Definieren einer Schnittstelle oder abstrakten Basisklasse 251
- 8.13. Erstellen eines Datenmodells oder Typsystems
- 8.14. Benutzerdefinierte Container erstellen 259
- 8.15. Delegieren des Zugriffs auf Attribute
- 8.16. Mehr als einen Konstruktor in einer Klasse definieren
- 8.17. Erstellen von Objekten ohne Aufrufen von __init __ () 267
- 8.18. Erweiterung einer Klasse mit gemischten Klassen 269
- 8.19. Implementieren von Zustandsobjekten oder Zustandsmaschinen 273
- 8.20. Aufrufen von Objektmethoden basierend auf einem Zeichenfolgennamen 278
- 8.21. Implementieren des Besuchermusters
- 8.22. Implementieren des Besuchermusters ohne Rekursion
- 8.23. Speicherverwaltung in zyklischen Datenstrukturen 288
- 8.24. Vergleichsfähige Klassen erstellen 291
- 8.25. Zwischengespeicherte Objekte erstellen 293
9. Metaprogrammierung (297) - 9.1. Overlays für Funktionen erstellen 297
- 9.2. Beibehalten von Funktionsmetadaten beim Schreiben von Decorators
- 9.3. Abrufen der primären Funktion aus dem Overlay
- 9.4. Dekorierer erstellen, die Argumente annehmen 302
- 9.5. Definieren eines Decorators mit benutzerdefinierbaren Attributen 303
- 9.6. Definieren von Dekorateuren, die ein optionales Argument annehmen 306
- 9.7. Typüberprüfung von Funktionen mit einem Decorator erzwingen
- 9.8. Dekorateure als Elemente einer Klasse definieren 311
- 9.9. Dekorateure als Klassen definieren 312
- 9.10. Anwenden von Decorators auf Klassenmethoden und statische Methoden
- 9.11. Schreiben von Decorators, die Argumente zu Funktionen in Overlays hinzufügen 316
- 9.12. Verwenden von Decorators zum Korrigieren von Klassendefinitionen 319
- 9.13. Verwenden einer Metaklasse zum Steuern der Objekterstellung
- 9.14. Überprüfen der Reihenfolge der Definition von Klassenattributen
- 9.15. Definieren von Metaklassen, die optionale Argumente akzeptieren
- 9.16. Überprüfung der Signatur mit den Argumenten * args und ** kwargs
- 9.17. Durchsetzung von Konventionen zum Schreiben von Code in einer Klasse
- 9.18. Klassen programmgesteuert definieren
- 9.19. Initialisieren von Klassenmitgliedern bei der Klassendefinition
- 9.20. Überladen von Methoden mit Funktionshinweisen
- 9.21. Vermeiden doppelter Eigenschaftsmethoden 342
- 9.22. Einfaches Definieren von Kontextmanagern
- 9.23. Ausführen von Code mit lokalen Nebeneffekten 346
- 9.24. Parsen und Analysieren von Python-Quellen
- 9.25. Python-Byte-Code zerlegen
10. Module und Pakete (355) - 10.1. Hierarchische Pakete mit Modulen erstellen 355
- 10.2. Steuern des Imports aller Symbole 356
- 10.3. Importieren von Submodulen aus einem Paket mit relativen Namen
- 10.4. Aufteilen eines Moduls in mehrere Dateien 358
- 10.5. Erstellen separater Verzeichnisse mit importiertem Code aus einem Namespace
- 10.6. Module neu laden
- 10.7. Aktivieren der Codeausführung aus einem Verzeichnis oder einer Zip-Datei als Ihr Hauptskript
- 10.8. Laden einer Paketdatendatei (365)
- 10.9. Hinzufügen von Verzeichnissen zur sys.path-Variablen 366
- 10.10. Importieren von Modulen nach Name in einem String 367
- 10.11. Laden von Modulen von einem Remote-Computer mithilfe von Hooks im Import-Befehl
- 10.12. Ändern von Modulen während des Imports
- 10.13. Installieren von Paketen nur für den persönlichen Gebrauch
- 10.14. Erstellen einer neuen Python-Umgebung
- 10.15. Pakete verteilen
11. Networking und Entwicklung von Webanwendungen (389) - 11.1. Interaktion mit HTTP-Diensten unter Verwendung von Client-Code 389
- 11.2. Erstellen eines TCP-Servers
- 11.3. Erstellen eines UDP-Servers
- 11.4. Generieren von IP-Adressbereichen aus einer CIDR-Adresse
- 11.5. Erstellen einer einfachen REST-basierten Schnittstelle 399
- 11.6. Umgang mit einfachen Remote Procedure Calls mit XML-RPC
- 11.7. Einfache Kommunikation zwischen Dolmetschern 405
- 11.8. Implementieren von Remoteprozeduraufrufen
- 11.9. Einfache Client-Authentifizierung
- 11.10. Hinzufügen von SSL-Unterstützung zu Webdiensten
- 11.11. Übergeben des Socket-Dateideskriptors zwischen Prozessen
- 11.12. Ereignisgesteuerte E / A-Operationen
- 11.13. Senden und Empfangen großer Arrays 427
12. Gleichzeitigkeit 429 - 12.1. Threads starten und stoppen 429
- 12.2. Bestimmen, ob ein Thread gestartet wurde 432
- 12.3. Kommunikation zwischen Threads 434
- 12.4. Sperren des kritischen Abschnitts 439
- 12.5. Sperren Vermeidung von Deadlocks
- 12.6. Speichern des Thread-Status 445
- 12.7. Erstellen eines Thread-Pools 446
- 12.8. Einfache parallele Programmierung 449
- 12.9. Wie man damit umgeht (und aufhört, sich um die GIL zu sorgen) 453
- 12.10. Aufgaben definieren, die als Akteure agieren 456
- 12.11. Publish-Subscribe-Messaging 459
- 12.12. Verwenden von Generatoren anstelle von Threads 462
- 12.13. Abfragen mehrerer Thread-Warteschlangen
- 12.14. Ausführen des Daemon-Prozesses unter Unix 471
13. Dienstprogrammskripte und Systemverwaltung (475) - 13.1. Akzeptieren von Skripteingaben unter Verwendung von Umleitung, Pipes oder Eingabedateien 475
- 13.2. Beenden des Programms mit Fehlermeldung (476)
- 13.3. Parsing-Optionen von der Befehlszeile
- 13.4. Anfordern eines Kennworts zur Laufzeit (479)
- 13.5. Abrufen von Terminalgrößen
- 13.6. Aufrufen externer Befehle und Abrufen der Ausgabe 481
- 13.7. Dateien und Verzeichnisse kopieren oder verschieben 482
- 13.8. Archive erstellen und extrahieren (484)
- 13.9. Dateien nach Namen suchen (485)
- 13.10. Konfigurationsdateien laden 486
- 13.11. Hinzufügen eines Aktionsaufzeichnungsmechanismus zu einfachen Skripten 489
- 13.12. Hinzufügen von Protokollierungsunterstützung zu Bibliotheken
- 13.13. Erstellen einer Stoppuhr 493
- 13.14. Begrenzung der Speicher- und CPU-Nutzung 494
- 13.15. Starten des Webbrowsers (495)
14. Testen, Debuggen und Ausnahmen 497 - 14.1. Testen der Ausgabe an den Stdout-Stream 497
- 14.2. Ersetzen von Objekten in Komponententests
- 14.3. Prüfung auf Ausnahmen in Einheitentests 501
- 14.4. Testausgabe in einer Datei speichern 503
- 14.5. Überspringen von Tests oder Vorhersagen eines Testversagens 504
- 14.6. Umgang mit mehreren Ausnahmen
- 14.7. Alle Ausnahmen abfangen 507
- 14.8. Benutzerdefinierte Ausnahmen erstellen 508
- 14.9. Auslösen einer Ausnahme als Antwort auf eine andere Ausnahme 510
- 14.10. Abrufen der letzten Ausnahme 512
- 14.11. Anzeige von Warnmeldungen (513)
- 14.12. Debuggen einfacher Programmabstürze
- 14.13. Profiling und Messprogrammlaufzeit (516)
- 14.14. Beschleunigung Ihrer Programme 518
15. C-Erweiterungen 525 - 15.1. Zugreifen auf C-Code unter Verwendung des ctypes-Moduls 526
- 15.2. Einfache Erweiterungsmodule in C schreiben
- 15.3. Schreiben von Erweiterungsfunktionen zum Manipulieren von Arrays 535
- 15.4. Verwalten von undurchsichtigen Zeigern in C-Erweiterungsmodulen
- 15.5. Definieren und Exportieren von C-APIs in Erweiterungsmodulen
- 15.6. Aufrufen von Python aus C-Code 544
- 15.7. Freigeben einer GIL-Sperre für C-Erweiterungen
- 15.8. Gleichzeitiges Threading von C und Python Code 549
- 15.9. Einfügen von C-Code in Swig-basierte Overlays 550
- 15.10. Verwenden von Cython zum Überlagern von vorhandenem C-Code 555
- 15.11. Verwenden von Cython zum Schreiben effizienter Array-Operationen 560
- 15.12. Konvertieren eines Zeigers auf eine Funktion in eine aufrufbare Einheit
- 15.13. NULL-terminierte Strings an C-Bibliotheken übergeben
- 15.14. Übergeben von Unicode-Strings an C-Bibliotheken
- 15.15. Konvertieren von Strings von C in ihre Python-Äquivalente 573
- 15.16. Verwenden unbekannter Codierungszeichenfolgen aus C-Rezept 574
- 15.17. Übergeben von Dateinamen an C-Spracherweiterungen
- 15.18. Offene Dateien an C-Spracherweiterungen übergeben
- 15.19. Laden von Daten aus dateiähnlichen Objekten in C
- 15.20. Iterierbare Objekte in C erhalten
- 15.21. Segmentierungsfehler diagnostizieren 582
A. Weiterführende Literatur (585) Index (587) |