Effektiv Python programmieren

90 Wege für bessere Python-Programme

Brett Slatkin

Cite this publication as

Brett Slatkin, Effektiv Python programmieren (2020), mitp-Verlag, Frechen, ISBN: 9783747501771

6584
accesses
5
quotes

Descripción

Brett Slatkin ist als Senior Software Engineer bei Google tätig und zudem leitender Ingenieur und Mitbegründer des Projekts . Zuvor hat er an der Python-Infrastruktur von mitgewirkt. Außerdem nutzte er Python zur Verwaltung von Googles riesigem Serverbestand und für dessen PubSubHubbub-System, an dessen Protokoll er ebenfalls mitgearbeitet hat.

Descripción / Abstract

Índice

  • Cover
  • Titel
  • Impressum
  • Inhaltsverzeichnis
  • Einleitung
  • Über den Autor
  • Danksagungen
  • Kapitel 1: Pythons Sicht der Dinge
  • Punkt 1: Kenntnis der Python-Version
  • Punkt 2: Stilregeln gemäß PEP 8
  • Punkt 3: Unterschiede zwischen bytes und str
  • Punkt 4: Interpolierte F-Strings statt C-Formatierungsstrings und str.format
  • Punkt 5: Hilfsfunktionen statt komplizierter Ausdrücke
  • Punkt 6: Mehrfachzuweisung beim Entpacken statt Indizierung
  • Punkt 7: enumerate statt range
  • Punkt 8: Gleichzeitige Verarbeitung von Iteratoren mit zip
  • Punkt 9: Verzicht auf else-Blöcke nach for- und while-Schleifen
  • Punkt 10: Wiederholungen verhindern durch Zuweisungsausdrücke
  • Kapitel 2: Listen und Dictionaries
  • Punkt 11: Zugriff auf Listen durch Slicing
  • Punkt 12: Verzicht auf Abstand und Start-/Ende-Index in einem einzigen Ausdruck
  • Punkt 13: Vollständiges Entpacken statt Slicing
  • Punkt 14: Sortieren nach komplexen Kriterien mit dem key-Parameter
  • Punkt 15: Vorsicht bei der Reihenfolge von dict-Einträgen
  • Punkt 16: get statt in und KeyError zur Handhabung fehlender Dictionary-Schlüssel verwenden
  • Punkt 17: defaultdict statt setdefault zur Handhabung fehlender Objekte verwenden
  • Punkt 18: Schlüsselabhängige Standardwerte mit __missing__ erzeugen
  • Kapitel 3: Funktionen
  • Punkt 19: Bei Funktionen mit mehreren Rückgabewerten nicht mehr als drei Variablen entpacken
  • Punkt 20: Exceptions statt Rückgabe von None
  • Punkt 21: Closures und der Gültigkeitsbereich von Variablen
  • Punkt 22: Klare Struktur dank variabler Anzahl von Positionsargumenten
  • Punkt 23: Optionale Funktionalität durch Schlüsselwort- Argumente
  • Punkt 24: Dynamische Standardwerte von Argumenten mittels None und Docstrings
  • Punkt 25: Eindeutigkeit durch reine Schlüsselwort- und reine Positionsargumente
  • Punkt 26: Funktions-Decorators mit functools.wraps definieren
  • Kapitel 4: Listen-Abstraktionen und Generatoren
  • Punkt 27: Listen-Abstraktionen statt map und filter
  • Punkt 28: Nicht mehr als zwei Ausdrücke in Listen-Abstraktionen
  • Punkt 29: Doppelte Arbeit in Abstraktionen durch Zuweisungsausdrücke vermeiden
  • Punkt 30: Generatoren statt Rückgabe von Listen
  • Punkt 31: Vorsicht beim Iterieren über Argumente
  • Punkt 32: Generatorausdrücke für umfangreiche Listen-Abstraktionen verwenden
  • Punkt 33: Mehrere Generatoren mit yield from verknüpfen
  • Punkt 34: Keine Datenübermittlung an Generatoren mit send
  • Punkt 35: Zustandsübergänge in Generatoren mit throw vermeiden
  • Punkt 36: Iteratoren und Generatoren mit itertools verwenden
  • Kapitel 5: Klassen und Schnittstellen
  • Punkt 37: Klassen statt integrierte Datentypen verschachteln
  • Punkt 38: Funktionen statt Klassen bei einfachen Schnittstellen
  • Punkt 39: Polymorphismus und generische Erzeugung von Objekten
  • Punkt 40: Initialisierung von Basisklassen durch super
  • Punkt 41: Verknüpfte Funktionalität mit Mix-in-Klassen
  • Punkt 42: Öffentliche statt private Attribute
  • Punkt 43: Benutzerdefinierte Container-Klassen durch Erben von collections.abc
  • Kapitel 6: Metaklassen und Attribute
  • Punkt 44: Einfache Attribute statt Getter- und Setter-Methoden
  • Punkt 45: @property statt Refactoring von Attributen
  • Punkt 46: Deskriptoren für wiederverwendbare @property-Methoden verwenden
  • Punkt 47: Verzögerte Zuweisung zu Attributen mittels __getattr__, __getattribute__ und __setattr__
  • Punkt 48: Unterklassen mit __init_subclass__ überprüfen
  • Punkt 49: Klassen mittels __init_subclass__ registrieren
  • Punkt 50: Zugriff auf Klassenattribute mit __set_name__
  • Punkt 51: Klassen-Decorators statt Metaklassen für Klassenerweiterungen nutzen
  • Kapitel 7: Nebenläufigkeit und parallele Ausführung
  • Punkt 52: Verwaltung von Kindprozessen mittels subprocess
  • Punkt 53: Threads, blockierende Ein-/Ausgabevorgänge und parallele Ausführung
  • Punkt 54: Wettlaufsituationen in Threads mit Lock verhindern
  • Punkt 55: Threads koordinieren mit Queue
  • Punkt 56: Erkennen, wann parallele Ausführung erforderlich ist
  • Punkt 57: Keine neuen Thread-Instanzen beim Fan-Out
  • Punkt 58: Die Verwendung von Queue zur parallelen Ausführung erfordert Refactoring
  • Punkt 59: ThreadPoolExecutor zur parallelen Ausführung verwenden
  • Punkt 60: Parallele Ausführung mehrerer Funktionen mit Coroutinen
  • Punkt 61: asyncio statt threaded I/O
  • Punkt 62: Threads und Coroutinen verwenden, um die Umstellung auf asyncio zu erleichtern
  • Punkt 63: asyncio-Event-Loop nicht blockieren
  • Punkt 64: Echte parallele Ausführung mit concurrent.futures
  • Kapitel 8: Robustheit und Performance
  • Punkt 65: Alle Blöcke einer try/except/else/finally- Anweisung nutzen
  • Punkt 66: contextlib und with-Anweisung für wiederverwendbares try/finally-Verhalten verwenden
  • Punkt 67: Für örtliche Zeitangaben datetime statt time verwenden
  • Punkt 68: Verlässliches pickle durch copyreg
  • Punkt 69: Falls Genauigkeit an erster Stelle steht, decimal verwenden
  • Punkt 70: Vor der Optimierung Messungen vornehmen
  • Punkt 71: deque für Erzeuger-Verbraucher-Warteschlangen verwenden
  • Punkt 72: Durchsuchen von Sequenzen geordneter Elemente mit bisect
  • Punkt 73: heapq für Prioritätswarteschlangen verwenden
  • Punkt 74: memoryview und bytearray für Zero-Copy- Interaktionen mit bytes verwenden
  • Kapitel 9: Testen und Debuggen
  • Punkt 75: Debuggen mit repr-Strings
  • Punkt 76: Ähnliches Verhalten mit TestCase-Unterklassen überprüfen
  • Punkt 77: Tests mit setUp, tearDown, setUpModule und tearDownModule voneinander abschotten
  • Punkt 78: Mocks für Tests von Code mit komplexen Abhängigkeiten verwenden
  • Punkt 79: Abhängigkeiten kapseln, um das Erstellen von Mocks und Tests zu erleichtern
  • Punkt 80: Interaktives Debuggen mit pdb
  • Punkt 81: Nutzung des Arbeitsspeichers und Speicherlecks mit tracemalloc untersuchen
  • Kapitel 10: Zusammenarbeit
  • Punkt 82: Module der Python-Community
  • Punkt 83: Virtuelle Umgebungen zum Testen von Abhängigkeiten
  • Punkt 84: Docstrings für sämtliche Funktionen, Klassen und Module
  • Punkt 85: Pakete zur Organisation von Modulen und zur Bereitstellung stabiler APIs verwenden
  • Punkt 86: Modulweiter Code zur Konfiguration der Deployment-Umgebung
  • Punkt 87: Einrichten einer Root-Exception zur Abschottung von Aufrufern und APIs
  • Punkt 88: Zirkuläre Abhängigkeiten auflösen
  • Punkt 89: warnings für Refactoring und Migration verwenden
  • Punkt 90: Statische Analyse mit typing zum Vermeiden von Bugs
  • Stichwortverzeichnis

Otros documentos de esta serie

    Títulos relacionados

      Otros títulos del mismo autor