Searching...
Deutsch
English
Español
简体中文
Français
Deutsch
日本語
Português
Italiano
한국어
Русский
Nederlands
العربية
Polski
हिन्दी
Tiếng Việt
Svenska
Ελληνικά
Türkçe
ไทย
Čeština
Română
Magyar
Українська
Bahasa Indonesia
Dansk
Suomi
Български
עברית
Norsk
Hrvatski
Català
Slovenčina
Lietuvių
Slovenščina
Српски
Eesti
Latviešu
فارسی
മലയാളം
தமிழ்
اردو
Python Tricks

Python Tricks

A Buffet of Awesome Python Features
by Dan Bader 2017 301 pages
Programming
Computer Science
Coding
Hören

Wichtige Erkenntnisse

1. Funktionen in Python sind erstklassige Objekte

Funktionen sind Objekte – sie können Variablen zugewiesen, in Datenstrukturen gespeichert, an andere Funktionen übergeben und von diesen zurückgegeben werden.

Funktionen als Daten. In Python werden Funktionen als erstklassige Bürger behandelt, was bedeutet, dass sie wie jedes andere Objekt manipuliert werden können. Dies ermöglicht mächtige Programmierparadigmen:

  • Zuweisung von Funktionen zu Variablen
  • Speicherung von Funktionen in Listen, Wörterbüchern oder anderen Datenstrukturen
  • Übergabe von Funktionen als Argumente an andere Funktionen
  • Rückgabe von Funktionen aus anderen Funktionen
  • Definition von Funktionen innerhalb anderer Funktionen (verschachtelte Funktionen)

Diese Flexibilität ermöglicht fortgeschrittene Programmiertechniken wie höherwertige Funktionen, Closures und funktionale Programmiermuster, was Python zu einer vielseitigen und ausdrucksstarken Sprache für komplexe Problemlösungen macht.

2. Dekoratoren verbessern und modifizieren das Verhalten von Funktionen

Dekoratoren definieren wiederverwendbare Bausteine, die auf eine aufrufbare Funktion angewendet werden können, um deren Verhalten zu ändern, ohne die Funktion selbst dauerhaft zu modifizieren.

Syntaktischer Zucker für Modifikationen. Dekoratoren bieten eine saubere und wiederverwendbare Möglichkeit, das Verhalten von Funktionen oder Klassen zu erweitern oder zu modifizieren:

  • Sie umhüllen eine Funktion und ändern deren Verhalten, ohne den Quellcode zu ändern
  • Häufige Anwendungen sind Logging, Timing, Zugriffskontrolle und Caching
  • Dekoratoren können gestapelt werden, um mehrere Modifikationen an einer einzigen Funktion vorzunehmen
  • Sie fördern das Prinzip der Trennung von Anliegen und halten den Code modular

Dekoratoren werden mit der @-Syntax implementiert, was den Code lesbarer und wartbarer macht. Sie nutzen Pythons erstklassige Funktionen und Closures, um einen mächtigen Mechanismus für Metaprogrammierung bereitzustellen.

3. *args und **kwargs ermöglichen flexible Funktionsargumente

*args und **kwargs ermöglichen es, Funktionen in Python mit einer variablen Anzahl von Argumenten zu schreiben.

Flexibilität bei variablen Argumenten. Diese speziellen Syntaxelemente erlauben es Funktionen, eine beliebige Anzahl von Positions- oder Schlüsselwortargumenten zu akzeptieren:

  • *args sammelt zusätzliche Positionsargumente in einem Tupel
  • **kwargs sammelt zusätzliche Schlüsselwortargumente in einem Wörterbuch
  • Sie bieten Flexibilität in Funktionsdefinitionen und ermöglichen zukünftige Erweiterungen
  • Nützlich für die Erstellung von Wrapper-Funktionen oder APIs mit optionalen Parametern

Diese Funktion ermöglicht die Erstellung von allgemeineren Funktionen und hilft dabei, Code zu schreiben, der sich an wechselnde Anforderungen anpassen kann, ohne die Funktionssignatur zu ändern.

4. Comprehensions bieten eine prägnante Syntax zur Erstellung von Sammlungen

Comprehensions sind nur syntaktischer Zucker für ein einfaches for-Schleifen-Muster.

Elegante Sammlungserstellung. Listen-, Mengen- und Wörterbuch-Comprehensions bieten eine kompakte Möglichkeit, Sammlungen basierend auf vorhandenen Iterablen zu erstellen:

  • Sie kombinieren die Erstellung und Befüllung einer Sammlung in einer einzigen Zeile
  • Oft lesbarer und schneller als äquivalente for-Schleifen
  • Können Bedingungen zur Filterung von Elementen enthalten
  • Verfügbar für Listen, Mengen und Wörterbücher

Beispiele:

  • Listen-Comprehension: [x*2 for x in range(10) if x % 2 == 0]
  • Mengen-Comprehension: {word.lower() for word in words}
  • Wörterbuch-Comprehension: {k: v**2 for k, v in my_dict.items()}

Obwohl mächtig, ist es wichtig, Prägnanz mit Lesbarkeit in Einklang zu bringen und übermäßig komplexe Comprehensions zu vermeiden, die die Absicht des Codes verschleiern könnten.

5. Generatorfunktionen und -ausdrücke vereinfachen die Erstellung von Iteratoren

Generatoren abstrahieren einen Großteil des Boilerplate-Codes, der beim Schreiben von klassenbasierten Iteratoren erforderlich ist.

Mühelose Iteration. Generatoren bieten eine einfache Möglichkeit, Iteratoren zu erstellen, ohne eine vollständige Klassenimplementierung zu benötigen:

  • Verwenden Sie das yield-Schlüsselwort, um eine Reihe von Werten zu erzeugen
  • Speicher effizient, da sie Werte on-the-fly generieren
  • Können in for-Schleifen, Listen-Comprehensions und anderen iterierbaren Kontexten verwendet werden
  • Generatorausdrücke bieten eine prägnante Syntax für einfache Generatoren

Generatorfunktionen:

def countdown(n):
    while n > 0:
        yield n
        n -= 1

Generatorausdruck:

squares = (x*x for x in range(10))

Generatoren sind besonders nützlich für die Arbeit mit großen Datensätzen oder unendlichen Sequenzen, da sie nicht alle Werte gleichzeitig im Speicher speichern.

6. Wörterbücher sind vielseitige und leistungsstarke Datenstrukturen

Wörterbücher sind die zentrale Datenstruktur in Python.

Effiziente Schlüssel-Wert-Speicherung. Wörterbücher bieten schnelle, flexible und funktionsreiche assoziative Arrays:

  • O(1) durchschnittliche Zeitkomplexität für Schlüsselabfragen, Einfügungen und Löschungen
  • Unterstützen beliebige hashbare Objekte als Schlüssel (Strings, Zahlen, Tupel)
  • Bieten Methoden wie get() für sicheren Schlüsselzugriff mit Standardwerten
  • Können verwendet werden, um switch/case-Anweisungen aus anderen Sprachen zu emulieren

Erweiterte Wörterbuchfunktionen:

  • OrderedDict: Merkt sich die Reihenfolge der eingefügten Schlüssel
  • defaultdict: Bietet Standardwerte für fehlende Schlüssel
  • ChainMap: Durchsucht mehrere Wörterbücher als eine einzige Zuordnung

Wörterbücher sind grundlegend für die Implementierung von Python und werden in der Sprache selbst sowie in vielen Python-Bibliotheken und -Frameworks extensiv verwendet.

7. Effektive Schleifentechniken verbessern die Lesbarkeit des Codes

Das Schreiben von C-ähnlichen Schleifen in Python gilt als unpythonic.

Pythonische Iteration. Python bietet mehrere idiomatische Möglichkeiten, über Sequenzen zu schleifen und Iterationen durchzuführen:

  • Verwenden Sie for item in iterable anstelle von Indizierung
  • Nutzen Sie enumerate(), wenn Sie sowohl Index als auch Wert benötigen
  • Verwenden Sie zip(), um gleichzeitig über mehrere Sequenzen zu iterieren
  • Nutzen Sie das itertools-Modul für komplexe Iterationen

Beispiele:

# Anstelle von:
for i in range(len(items)):
    print(i, items[i])

# Verwenden Sie:
for i, item in enumerate(items):
    print(i, item)

# Schleifen über zwei Listen:
for name, age in zip(names, ages):
    print(f"{name} ist {age} Jahre alt")

Diese Techniken führen zu prägnanterem, lesbarerem und effizienterem Code und entsprechen Pythons Philosophie der Klarheit und Einfachheit.

8. Objektorientierte Programmierkonzepte optimieren die Codeorganisation

Abstrakte Basisklassen (ABCs) stellen sicher, dass abgeleitete Klassen bestimmte Methoden der Basisklasse implementieren.

Strukturierte Codegestaltung. Pythons objektorientierte Funktionen bieten leistungsstarke Werkzeuge zur Organisation und Strukturierung von Code:

  • Klassen kapseln Daten und Verhalten
  • Vererbung ermöglicht Codewiederverwendung und Spezialisierung
  • Abstrakte Basisklassen definieren Schnittstellen und erzwingen Implementierung
  • Eigenschaften bieten kontrollierten Zugriff auf Attribute
  • Spezialmethoden (Dunder-Methoden) ermöglichen die Anpassung des Objektverhaltens

Wichtige OOP-Konzepte in Python:

  • Polymorphismus durch Duck-Typing
  • Mehrfachvererbung und Method Resolution Order (MRO)
  • Komposition als Alternative zur Vererbung
  • Metaklassen für erweiterte Klassensteuerung

Der effektive Einsatz von OOP-Prinzipien führt zu wartbareren, erweiterbaren und modularen Code-Strukturen.

9. Datenstrukturen in Python bieten vielfältige Funktionalitäten

Wenn Sie keine Unterstützung für parallele Verarbeitung benötigen, ist die Implementierung von collections.deque eine ausgezeichnete Standardwahl für die Implementierung einer FIFO-Warteschlange in Python.

Maßgeschneiderte Datenorganisation. Python bietet eine reiche Auswahl an eingebauten und Standardbibliotheks-Datenstrukturen, die verschiedenen Bedürfnissen gerecht werden:

  • Listen: Dynamische Arrays für allgemeine Sequenzen
  • Tupel: Unveränderliche Sequenzen für feste Sammlungen
  • Mengen: Ungeordnete Sammlungen einzigartiger Elemente
  • Deques: Doppelt verknüpfte Warteschlangen für effiziente Einfügungen/Löschungen an beiden Enden
  • Heapq: Implementierung einer Prioritätswarteschlange
  • Counter: Multiset zum Zählen von hashbaren Objekten

Die Wahl der richtigen Datenstruktur kann die Leistung und Klarheit Ihres Codes erheblich beeinflussen. Berücksichtigen Sie Faktoren wie:

  • Erforderliche Operationen (z.B. häufige Einfügungen, Löschungen, Abfragen)
  • Speicherverbrauch
  • Anforderungen an die Thread-Sicherheit
  • Bedarf an Ordnung oder Sortierung

Das Verständnis der Eigenschaften und Kompromisse verschiedener Datenstrukturen ermöglicht effizientere und elegantere Lösungen für Programmierprobleme.

10. Effizientes String-Formatting verbessert die Codeklarheit

Wenn Ihre Formatstrings vom Benutzer bereitgestellt werden, verwenden Sie Template Strings, um Sicherheitsprobleme zu vermeiden. Andernfalls verwenden Sie Literal String Interpolation, wenn Sie Python 3.6+ verwenden, und "New Style" String Formatting, wenn nicht.

Klare und sichere String-Konstruktion. Python bietet mehrere Methoden zum Formatieren von Strings, jede mit ihren eigenen Stärken:

  • %-Formatierung: Alte Methode, immer noch weit verbreitet
  • str.format(): Lesbarer und flexibler
  • f-Strings: Prägnant und leistungsstark, verfügbar in Python 3.6+
  • Template Strings: Sicherer für benutzerdefinierte Formate

Beispiel für f-Strings:

name = "Alice"
age = 30
print(f"{name} ist {age} Jahre alt")

Template Strings für Benutzereingaben:

from string import Template
user_input = Template("Hallo, $name!")
print(user_input.substitute(name="Bob"))

Die Wahl der geeigneten String-Formatierungsmethode verbessert die Lesbarkeit, Wartbarkeit und Sicherheit des Codes, insbesondere beim Umgang mit benutzerdefinierten Daten oder komplexen String-Konstruktionen.

Last updated:

Rezensionen

4.44 out of 5
Average of 1k+ ratings from Goodreads and Amazon.

Python-Tricks wird hoch gelobt für seinen prägnanten und dennoch aufschlussreichen Ansatz zu fortgeschrittenen Python-Themen. Leser schätzen die praktischen Tipps, klaren Erklärungen und den Fokus auf Best Practices. Viele fanden es hilfreich, um Wissenslücken zu schließen und ihre Programmierfähigkeiten zu verbessern. Der konversationelle Ton und die systematische Struktur des Buches machen es zugänglich und angenehm zu lesen. Während einige erfahrene Entwickler es als weniger herausfordernd empfanden, sind sich die meisten einig, dass es eine ausgezeichnete Ressource für diejenigen ist, die ihre Python-Kenntnisse vertiefen und idiomatischeren Code schreiben möchten.

Über den Autor

Dan Bader ist ein angesehener Python-Experte und Pädagoge. Er ist bekannt für seine Fähigkeit, komplexe Programmierkonzepte auf eine klare und zugängliche Weise zu erklären. Bader ist der Gründer von Real Python, einer beliebten Online-Ressource für Python-Tutorials und -Kurse. Er verfügt über umfangreiche Erfahrung in der Softwareentwicklung und hat mit Unternehmen wie Google und Microsoft zusammengearbeitet. Baders Schreibstil wird für seine Freundlichkeit und Anschaulichkeit gelobt, wodurch technischer Inhalt für Lernende zugänglicher wird. Seine Arbeit konzentriert sich darauf, Entwicklern zu helfen, ihre Python-Fähigkeiten zu verbessern und Best Practices in ihrem Code anzuwenden.

0:00
-0:00
1x
Create a free account to unlock:
Bookmarks – save your favorite books
History – revisit books later
Ratings – rate books & see your ratings
Listening – audio summariesListen to the first takeaway of every book for free, upgrade to Pro for unlimited listening.
Unlock unlimited listening
Your first week's on us!
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 5: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Sep 29,
cancel anytime before.
Compare Features Free Pro
Read full text summaries
Summaries are free to read for everyone
Listen to full summaries
Free users can listen to the first takeaway only
Unlimited Bookmarks
Free users are limited to 10
Unlimited History
Free users are limited to 10
What our users say
15,000+ readers
“...I can 10x the number of books I can read...”
“...exceptionally accurate, engaging, and beautifully presented...”
“...better than any amazon review when I'm making a book-buying decision...”
Save 62%
Yearly
$119.88 $44.99/yr
$3.75/mo
Monthly
$9.99/mo
Try Free & Unlock
7 days free, then $44.99/year. Cancel anytime.