02 Übung: PEP 8 - Level 4: Vorher/Nachher-Vergleich
October 2025 (3803 Words, 22 Minutes)
Einleitung
Willkommen zu Level 4 PEP 8 Übungen: Vorher/Nachher-Vergleich! Diese fortgeschrittenen Übungen helfen Ihnen, die praktischen Auswirkungen der PEP 8-Konformität zu verstehen, indem sie nicht-konformen Code mit seiner korrigierten Version vergleichen.
Lernziele:
- Spezifische Unterschiede zwischen nicht-konformem und konformem Code identifizieren
- Die Begründung hinter jeder PEP 8-Regel verstehen
- Erkennen, wie kleine Änderungen die Lesbarkeit erheblich verbessern
- Kritisch über zusätzliche Verbesserungen jenseits der Grundkonformität nachdenken
- Code-Review-Fähigkeiten für Produktionsumgebungen entwickeln
Anleitung:
- Studieren Sie sowohl die “Vorher”- als auch die “Nachher”-Version sorgfältig
- Identifizieren Sie ALLE Unterschiede zwischen den beiden Versionen
- Beantworten Sie die Fragen zu den angewendeten PEP 8-Regeln
- Überlegen Sie, welche zusätzlichen Verbesserungen vorgenommen werden könnten
- Klicken Sie auf “Antwort anzeigen”, um Ihre Analyse zu vergleichen
Schwierigkeit: Fortgeschritten
Zeit: 10-15 Minuten pro Übung
Voraussetzungen: Level 1 und Level 2 Übungen zuerst abschließen
Warum diese Übung wichtig ist: In der realen Entwicklung werden Sie oft Pull Requests überprüfen oder bestehenden Code refaktorisieren. Diese Übung trainiert Sie, PEP 8-Verstöße im Kontext zu erkennen und zu artikulieren, warum die korrigierte Version besser ist—essenzielle Fähigkeiten für Code-Reviews und technische Diskussionen.
Übung 4.1: Einfache Funktion
Vorher
def calc(a,b):return a+b
Nachher
def calc(a, b):
return a + b
Fragen
- Listen Sie alle Unterschiede zwischen Vorher und Nachher auf
- Welche spezifischen PEP 8-Regeln machen die Nachher-Version besser?
- Welche zusätzlichen Verbesserungen würden Sie vorschlagen?
💡 Antwort anzeigen
Unterschiede
- Leerzeichen nach Komma in Parametern hinzugefügt:
a,b→a, b - Funktionskörper in neue Zeile verschoben statt auf derselben Zeile wie
def - Leerzeichen um
+Operator hinzugefügt:a+b→a + b
Angewendete PEP 8-Regeln
- Leerzeichen nach Kommata verwenden in Parameterlisten
- Mehrere Anweisungen auf einer Zeile vermeiden (zusammengesetzte Anweisungen sind nicht empfohlen)
- Binäre Operatoren mit Leerzeichen umgeben
Zusätzliche Verbesserungen
- Funktionsname
calcist vage; besser:calculate_sumoderadd_numbers - Fehlender Docstring
- Fehlende Type Hints:
def calculate_sum(a: float, b: float) -> float: """Gibt die Summe zweier Zahlen zurück.""" return a + b
Wichtigste Erkenntnis
Selbst einfache Einzeiler profitieren von PEP 8-Konformität. Die Nachher-Version ist einfacher zu lesen, zu debuggen und zu warten.
Übung 4.2: Import-Anweisungen
Vorher
import sys,os,json
from typing import List,Dict
import numpy as np
Nachher
import json
import os
import sys
from typing import Dict, List
import numpy as np
Fragen
- Listen Sie alle Unterschiede zwischen Vorher und Nachher auf
- Welche spezifischen PEP 8-Regeln machen die Nachher-Version besser?
- Warum ist die Leerzeile in der Nachher-Version wichtig?
💡 Antwort anzeigen
Unterschiede
- Jeder Import auf separater Zeile
- Standard-Bibliotheks-Imports alphabetisch sortiert (
json,os,sys) - Leerzeichen nach Kommata in
from-Import hinzugefügt:List,Dict→Dict, List - Typing-Imports alphabetisch sortiert:
List,Dict→Dict, List - Leerzeile zur Trennung von Standard-Bibliothek und Third-Party-Imports
- Imports nach Typ gruppiert (Standard-Bibliothek, dann Third-Party)
Angewendete PEP 8-Regeln
- Imports sollten normalerweise auf separaten Zeilen stehen
- Imports sollten gruppiert werden: Standard-Bibliothek, verwandte Third-Party, lokale Anwendung/Bibliothek
- Imports innerhalb jeder Gruppe sollten alphabetisch sortiert sein
- Leerzeichen nach Kommata verwenden
- Leerzeile zwischen verschiedenen Import-Gruppen einfügen
Warum die Leerzeile wichtig ist
Sie trennt visuell verschiedene Import-Kategorien und macht sofort klar, welche Imports sind:
- Eingebaute Python-Module (Standard-Bibliothek)
- Externe Abhängigkeiten (Third-Party-Pakete)
- Lokaler Anwendungscode
Dies hilft bei:
- Dependency-Tracking: Einfach zu sehen, welche externen Pakete erforderlich sind
- Wartung: Schnelle Identifikation, was entfernt werden kann
- Debugging: Verstehen, welche Imports Probleme in verschiedenen Umgebungen verursachen könnten
Wichtigste Erkenntnis
Import-Organisation scheint trivial, aber in großen Projekten mit Hunderten von Imports spart richtige Gruppierung und Sortierung erheblich Zeit und verhindert Fehler.
Übung 4.3: Klassendefinition
Vorher
class dataProcessor:
def __init__(self,items):
self.items=items
self.count=len(items)
def Process(self): return [x*2 for x in self.items]
Nachher
class DataProcessor:
def __init__(self, items):
self.items = items
self.count = len(items)
def process(self):
return [x * 2 for x in self.items]
Fragen
- Listen Sie alle Unterschiede zwischen Vorher und Nachher auf
- Welche spezifischen PEP 8-Regeln machen die Nachher-Version besser?
- Welche zusätzlichen Verbesserungen würden diesen Code produktionsreif machen?
💡 Antwort anzeigen
Unterschiede
- Klassenname von snake_case zu PascalCase geändert:
dataProcessor→DataProcessor - Leerzeichen nach Komma in
__init__-Parametern hinzugefügt:self,items→self, items - Leerzeichen um
=in Zuweisungen hinzugefügt:self.items=items→self.items = items - Methodenname von PascalCase zu snake_case geändert:
Process→process - Methodenkörper auf separate Zeile verschoben (keine zusammengesetzte Anweisung)
- Leerzeile zwischen Methoden hinzugefügt
- Leerzeichen um
*Operator in List Comprehension hinzugefügt:x*2→x * 2
Angewendete PEP 8-Regeln
- Klassennamen sollten PascalCase verwenden (CapWords-Konvention)
- Methodennamen sollten snake_case verwenden (Kleinbuchstaben mit Unterstrichen)
- Leerzeichen nach Kommata
- Leerzeichen um Operatoren (Zuweisung und Arithmetik)
- Zusammengesetzte Anweisungen vermeiden (mehrere Anweisungen auf einer Zeile)
- Leerzeile zwischen Methoden in einer Klasse
Produktionsreife Verbesserungen
from typing import List
class DataProcessor:
"""Verarbeitet und transformiert numerische Daten."""
def __init__(self, items: List[float]):
"""
Initialisiert den Processor mit Items.
Args:
items: Liste numerischer Werte zur Verarbeitung
"""
self.items = items
self.count = len(items)
def process(self) -> List[float]:
"""
Verdoppelt jeden Wert in der Liste.
Returns:
Liste verarbeiteter Werte (jeder Wert mit 2 multipliziert)
"""
return [x * 2 for x in self.items]
Zusätzliche Verbesserungen umfassen:
- Klassen-Docstring zur Erklärung des Zwecks
- Type Hints für Parameter und Rückgabewerte
- Methoden-Docstrings mit Args- und Returns-Abschnitten
- Aussagekräftigerer Methodenname (z.B.
double_valuesstatt generischemprocess)
Wichtigste Erkenntnis
Namenskonventionen sind nicht willkürlich—sie liefern sofortige visuelle Hinweise darauf, womit Sie es zu tun haben (Klasse vs. Methode vs. Variable). Konsistente Benennung macht Code selbstdokumentierend.
Übung 4.4: Dictionary und Variablen
Vorher
camera={'x':0,'y':2.0,'z':1.5}
max_distance=100
default_threshold=0.5
Nachher
camera = {'x': 0, 'y': 2.0, 'z': 1.5}
MAX_DISTANCE = 100
DEFAULT_THRESHOLD = 0.5
Fragen
- Listen Sie alle Unterschiede zwischen Vorher und Nachher auf
- Warum werden die Variablennamen in Nachher zu Großbuchstaben geändert?
- Wann sollten Sie UPPER_CASE vs. snake_case für Variablen verwenden?
💡 Antwort anzeigen
Unterschiede
- Leerzeichen um
=Zuweisungsoperator hinzugefügt - Leerzeichen nach Doppelpunkten im Dictionary hinzugefügt:
'x':0→'x': 0 - Variablennamen zu UPPER_CASE für Konstanten geändert:
max_distance→MAX_DISTANCE
Warum UPPER_CASE?
Die Nachher-Version geht davon aus, dass dies Konstanten auf Modulebene sind, die sich während der Programmausführung nicht ändern sollten. UPPER_CASE signalisiert anderen Entwicklern: “Ändern Sie diesen Wert nicht.”
Dies ist eine semantische Verbesserung, nicht nur stilistisch:
- Absicht ist klar: Dies sind Konfigurationswerte
- Schutz vor Bugs: Versehentliches Neuzuweisen einer Konstante ist offensichtlicher
- Konventionsausrichtung: Folgt Python und breiteren Programmiergemeinschaftsstandards
Wann jede Namenskonvention verwenden
UPPER_CASE (Konstanten):
- Konstanten auf Modulebene:
PI = 3.14159 - Konfigurationswerte:
MAX_SIZE = 1000,CONFIG_PATH = '/etc/app/config.yml' - Magische Zahlen, die sich nie ändern:
SECONDS_PER_DAY = 86400
snake_case (Variablen):
- Reguläre Variablen, die sich ändern können:
camera_x,user_input,temp_result - Funktionsparameter:
def process(data, threshold=10) - Lokale Variablen in Funktionen/Methoden
Sonderfall - Die camera Variable:
Das camera Dictionary könnte je nach Kontext eine Konstante sein oder nicht:
# Wenn es Konfiguration ist, die sich nie ändert:
CAMERA_DEFAULT_POSITION = {'x': 0, 'y': 2.0, 'z': 1.5}
# Wenn es eine Variable ist, die aktualisiert wird:
camera_position = {'x': 0, 'y': 2.0, 'z': 1.5}
# Später im Code:
camera_position['x'] = user_input.x
Wichtigste Erkenntnis
Namenskonventionen kommunizieren Absicht und Veränderlichkeit. UPPER_CASE sagt Lesern “dies wird sich nicht ändern”, während snake_case sagt “dies kann neu zugewiesen werden”. Wählen Sie weise basierend darauf, wie die Variable verwendet wird.
Übung 4.5: Komplexe Funktion
Vorher
def process(data,threshold=10,debug=False):
result=[]
for item in data:
if item>threshold:result.append(item*2)
if debug:print(f"Processed {len(result)} items")
return result
Nachher
def process(data, threshold=10, debug=False):
result = []
for item in data:
if item > threshold:
result.append(item * 2)
if debug:
print(f"Processed {len(result)} items")
return result
Fragen
- Listen Sie alle Unterschiede zwischen Vorher und Nachher auf
- Erklären Sie, warum das Aufbrechen der zusammengesetzten Anweisungen die Lesbarkeit verbessert
- Welche anderen Verbesserungen würden Sie vorschlagen?
💡 Antwort anzeigen
Unterschiede
- Leerzeichen nach Kommata in Parametern:
data,threshold→data, threshold - Leerzeichen um
=Zuweisung:result=[]→result = [] - Leerzeichen um
>Vergleich:item>threshold→item > threshold - Zusammengesetzte Anweisung aufgeteilt:
if item>threshold:result.append(item*2)→ zwei Zeilen - Zusammengesetzte Anweisung aufgeteilt:
if debug:print(...)→ zwei Zeilen - Leerzeichen um
*Operator:item*2→item * 2
Warum das Aufbrechen zusammengesetzter Anweisungen hilft
Lesbarkeit:
- Jede logische Operation ist auf ihrer eigenen Zeile
- Kontrollfluss ist sofort klar
- Weniger kognitive Last beim Parsen
Debugging:
- Kann Breakpoints auf spezifischen Zeilen setzen
- Stack Traces zeigen exakte Fehlerzeile
- Einfacher print-Anweisungen oder Logging hinzuzufügen
Wartbarkeit:
- Einfach zusätzliche Bedingungen hinzuzufügen:
if item > threshold and item < max_value: - Einfach Logik zu erweitern: Logging, Fehlerbehandlung usw. hinzufügen
- Einfacher in Versionskontrolle zu überprüfen (Änderungen sind zeilenbasiert)
Beispiel für einfache Erweiterung:
# Vorher - schwer zu erweitern:
if item>threshold:result.append(item*2)
# Nachher - einfach Logging hinzuzufügen:
if item > threshold:
logger.debug(f"Processing item: {item}")
result.append(item * 2)
Zusätzliche Verbesserungen
from typing import List
def process(
data: List[float],
threshold: float = 10,
debug: bool = False
) -> List[float]:
"""
Verarbeitet Daten durch Filtern und Verdoppeln von Werten über Schwellenwert.
Args:
data: Liste numerischer Werte zur Verarbeitung
threshold: Minimalwert zum Einschließen (Standard: 10)
debug: Ob Debug-Informationen ausgegeben werden sollen (Standard: False)
Returns:
Liste verarbeiteter Werte (verdoppelte Items über Schwellenwert)
Example:
>>> process([5, 15, 20], threshold=10)
[30, 40]
"""
result = []
for item in data:
if item > threshold:
result.append(item * 2)
if debug:
print(f"Processed {len(result)} items")
return result
Weitere Verbesserungen:
- Type Hints für bessere IDE-Unterstützung und Type Checking
- Docstring mit Args, Returns und Example
- Erwägen Sie List Comprehension für pythonischeren Code:
result = [item * 2 for item in data if item > threshold]
Wichtigste Erkenntnis
Zusammengesetzte Anweisungen sparen vertikalen Raum, opfern aber Lesbarkeit, Debuggability und Wartbarkeit. Die zusätzlichen Zeilen sind es wert. Moderne Editoren klappen Code ohnehin zusammen, sodass vertikaler Raum kein echtes Problem ist.
Übung 4.6: Praxisbeispiel
Vorher
from dash import Dash,html,dcc
import plotly.graph_objects as go
import numpy as np
import sys
def create_visualization(x_data,y_data,title="Plot"):
fig=go.Figure()
fig.add_trace(go.Scatter(x=x_data,y=y_data,mode='lines',name='Data'))
fig.update_layout(title=title,xaxis_title="X",yaxis_title="Y")
return fig
APP_title="Road Profile Viewer"
Nachher
from dash import Dash, dcc, html
import numpy as np
import plotly.graph_objects as go
def create_visualization(x_data, y_data, title="Plot"):
fig = go.Figure()
fig.add_trace(go.Scatter(
x=x_data,
y=y_data,
mode='lines',
name='Data'
))
fig.update_layout(
title=title,
xaxis_title="X",
yaxis_title="Y"
)
return fig
APP_TITLE = "Road Profile Viewer"
Fragen
- Listen Sie ALLE Unterschiede auf (mindestens 10)
- Erklären Sie die Änderungen in der Import-Organisation
- Warum ist die mehrzeilige Funktionsaufruf-Formatierung besser?
💡 Antwort anzeigen
Unterschiede
- Leerzeichen nach Kommata in Imports hinzugefügt:
Dash,html,dcc→Dash, dcc, html - Imports innerhalb von Dash-Import alphabetisch sortiert:
html,dcc→dcc, html sysImport entfernt (nicht verwendeter Import)- Imports neu geordnet: dash, numpy, plotly (Bibliotheksorganisation)
- Leerzeichen nach Kommata in Funktionsparametern:
x_data,y_data→x_data, y_data - Leerzeichen um
=Zuweisung fürfig:fig=→fig = - Mehrzeilige Formatierung für
add_trace()Aufruf - Mehrzeilige Formatierung für
update_layout()Aufruf - Jeder Parameter auf eigener Zeile in Funktionsaufrufen
- Konstante von
APP_titlezuAPP_TITLEgeändert (konsistentes UPPER_CASE) - Leerzeichentrennung zwischen Import-Gruppen
Import-Organisation erklärt
Vorher:
from dash import Dash,html,dcc # Gemischte Reihenfolge, keine Leerzeichen
import plotly.graph_objects as go
import numpy as np
import sys # Nicht verwendet
Nachher:
from dash import Dash, dcc, html # Alphabetisch, mit Leerzeichen
import numpy as np # Alphabetisch innerhalb der Gruppe
import plotly.graph_objects as go
# Hinweis: In größeren Projekten könnte man weiter trennen:
# 1. Standard-Bibliothek (keine hier)
# 2. Third-Party (dash, numpy, plotly)
# 3. Lokale Anwendungs-Imports
Vorteile:
- Alphabetische Sortierung macht Imports leicht auffindbar
- Entfernen nicht verwendeter Imports reduziert Abhängigkeiten und Import-Zeit
- Konsistente Abstände verbessern Lesbarkeit
- Logische Gruppierung zeigt Abhängigkeitsbeziehungen
Warum mehrzeilige Funktionsaufrufe besser sind
Vergleich:
# Vorher - alles auf einer Zeile zusammengedrängt:
fig.add_trace(go.Scatter(x=x_data,y=y_data,mode='lines',name='Data'))
Probleme:
- Schwer zu lesen mit vielen Parametern
- Leicht einen Parameter zu übersehen
- Schwierig zu modifizieren
- Schlechte Git-Diff-Sichtbarkeit
# Nachher - ein Parameter pro Zeile:
fig.add_trace(go.Scatter(
x=x_data,
y=y_data,
mode='lines',
name='Data'
))
Vorteile:
- Jedes Argument ist klar sichtbar
- Einfach einzelne Argumente hinzuzufügen/zu entfernen/zu ändern
- Einfach zu sehen, welche Parameter gesetzt werden
- Einfacher in Versionskontrolle zu überprüfen (ein Parameter pro Zeile)
- Lesbarer für komplexe Funktionsaufrufe
- Selbstdokumentierend (Parameternamen sichtbar ohne Scrollen)
Auswirkung auf Versionskontrolle (Git Diffs)
Vorher - Schwer zu sehen, was sich geändert hat:
- fig.add_trace(go.Scatter(x=x_data,y=y_data,mode='lines',name='Data'))
+ fig.add_trace(go.Scatter(x=x_data,y=y_data,mode='markers',name='Data'))
Was hat sich geändert? Sie müssen die gesamte Zeile sorgfältig lesen.
Nachher - Kristallklar:
fig.add_trace(go.Scatter(
x=x_data,
y=y_data,
- mode='lines',
+ mode='markers',
name='Data'
))
Sofort offensichtlich: Modus von ‘lines’ zu ‘markers’ geändert.
Wann mehrzeiliges Format verwenden
Mehrzeilig verwenden, wenn:
- Funktion hat 3+ Parameter
- Zeile würde 88 Zeichen überschreiten
- Parameter sind komplex (verschachtelte Strukturen, lange Strings)
- Lesbarkeit würde sich verbessern
- Arbeit in Team-Umgebung (besser für Code-Review)
Einzeilig ist OK, wenn:
- Funktion hat 1-2 einfache Parameter
- Gesamtlänge < 60 Zeichen
- Parameter sind selbsterklärend
- Beispiel:
print(result),len(data)
Produktionsreife Version
"""Road Profile Visualisierungsmodul."""
from typing import Optional
from dash import Dash, dcc, html
import numpy as np
import plotly.graph_objects as go
# Anwendungskonstanten
APP_TITLE = "Road Profile Viewer"
DEFAULT_LINE_COLOR = "blue"
DEFAULT_LINE_WIDTH = 2
def create_visualization(
x_data: np.ndarray,
y_data: np.ndarray,
title: str = "Plot",
line_color: str = DEFAULT_LINE_COLOR,
line_width: int = DEFAULT_LINE_WIDTH
) -> go.Figure:
"""
Erstellt eine interaktive Visualisierung von Road-Profile-Daten.
Args:
x_data: X-Achsen-Koordinaten (horizontale Distanz)
y_data: Y-Achsen-Koordinaten (Höhe oder Profilhöhe)
title: Plot-Titel (Standard: "Plot")
line_color: Farbe der Linie (Standard: blau)
line_width: Breite der Linie (Standard: 2)
Returns:
Plotly Figure Objekt bereit zur Anzeige
Example:
>>> x = np.linspace(0, 100, 50)
>>> y = np.sin(x / 10)
>>> fig = create_visualization(x, y, title="Sinuswellen-Profil")
"""
fig = go.Figure()
fig.add_trace(go.Scatter(
x=x_data,
y=y_data,
mode='lines',
name='Road Profile',
line=dict(color=line_color, width=line_width)
))
fig.update_layout(
title=title,
xaxis_title="Distanz (m)",
yaxis_title="Höhe (m)",
hovermode='x unified',
template='plotly_white'
)
return fig
Wichtigste Erkenntnis
Komplexität von realem Code erfordert PEP 8-Konformität umso mehr. Mehrzeilige Formatierung, richtige Imports und konsistente Benennung sind nicht nur Stil—sie sind essenziell für Team-Zusammenarbeit, Code-Review und langfristige Wartung. Die Zeit, die beim Verständnis gespart wird, überwiegt die zusätzlichen Tastenanschläge bei weitem.
Lernbewertung
Nach Abschluss dieser Übungen sollten Sie in der Lage sein:
- ✅ Schnell Unterschiede zwischen konformem und nicht-konformem Code zu identifizieren
- ✅ Zu artikulieren, welche PEP 8-Regeln verletzt werden und warum sie wichtig sind
- ✅ Zu erkennen, wann Code über grundlegende PEP 8-Konformität hinaus Refactoring benötigt
- ✅ Die praktischen Vorteile von Stilrichtlinien zu verstehen (Debugging, Wartung, Zusammenarbeit)
- ✅ Diese Prinzipien anzuwenden, wenn Sie Pull Requests überprüfen oder Code refaktorisieren
Selbstbewertungs-Quiz
Frage 1: Warum ist def calc(a,b):return a+b problematisch, obwohl es “funktioniert”?
Antwort
Mehrere Probleme:
- Schwer zu debuggen - kann keinen Breakpoint auf Return-Anweisung setzen
- Schwer zu erweitern - kein Raum für Validierung, Logging usw.
- Verletzt PEP 8 - zusammengesetzte Anweisung, fehlende Leerzeichen
- Schlechte Lesbarkeit - erfordert Parsen dichter Syntax
- Schlechte Benennung -
calcist vage
Fazit: “Funktionieren” ist nicht genug. Professioneller Code muss lesbar, wartbar sein und Standards folgen.
Frage 2: Was ist der Hauptvorteil richtiger Import-Organisation?
Antwort
Abhängigkeits-Klarheit.
Wenn Imports richtig gruppiert und sortiert sind, können Sie sofort sehen:
- Welche externen Pakete erforderlich sind (Deployment-Aspekt)
- Was aus Standard-Bibliothek vs. Third-Party ist (Zuverlässigkeitsaspekt)
- Was entfernt werden kann ohne Code zu brechen (Wartungsaspekt)
In einem Projekt mit 50+ Imports spart diese Organisation Stunden an Debugging und Dependency Management.
Frage 3: Wann sollten Sie mehrzeilige Funktionsaufrufe verwenden?
Antwort
Mehrzeilige Formatierung verwenden, wenn:
- Funktion hat 3+ Parameter
- Zeile überschreitet 88 Zeichen
- Arbeit in Team-Umgebung (besser für Code-Review)
- Parameter sind komplex (verschachtelte Strukturen, Berechnungen)
- Sie selbstdokumentierenden Code wollen
Faustregel: Wenn Sie zögern, verwenden Sie mehrzeilig. Der zusätzliche vertikale Raum ist die Klarheit wert.
Nächste Schritte
Sie haben manuelle PEP 8-Überprüfung gemeistert! 🎉
Jetzt ist es Zeit, Automatisierung zu nutzen:
- Ruff in Ihren Projekten installieren:
uv add ruff --dev - Automatische Prüfungen ausführen:
ruff check . ruff format . -
Ihre IDE konfigurieren, um PEP 8-Probleme in Echtzeit anzuzeigen
-
Pre-Commit-Hooks einrichten, um Probleme vor Commits abzufangen
- CI/CD-Prüfungen hinzufügen, um Stil in Pull Requests durchzusetzen
Denken Sie an das Prinzip
Manuelles Verständnis → Automatisierte Durchsetzung
Sie haben das Auge entwickelt, Probleme zu erkennen. Jetzt lassen Sie Tools die repetitive Arbeit machen, während Sie sich auf höhere Code-Qualitätsaspekte konzentrieren wie:
- Architektur und Design-Patterns
- Performance-Optimierung
- Sicherheitslücken
- Geschäftslogik-Korrektheit
Kontinuierliche Verbesserung
- Überprüfen Sie Ihren eigenen alten Code mit frischen Augen
- Nehmen Sie an Code-Reviews teil und teilen Sie PEP 8-Wissen
- Mentorieren Sie andere - Lehren festigt Verständnis
- Bleiben Sie aktuell - PEP 8 entwickelt sich weiter (wenn auch langsam)
Zusätzliche Ressourcen
- PEP 8 Offiziell: python.org/dev/peps/pep-0008
- Ruff Dokumentation: docs.astral.sh/ruff
- Black (Code-Formatter): black.readthedocs.io
- Real Python PEP 8 Guide: realpython.com/python-pep8
Feedback und Fragen
Wenn Sie diese Übungen hilfreich fanden oder Verbesserungsvorschläge haben, wenden Sie sich bitte an Ihren Dozenten oder reichen Sie Feedback über die Kursplattform ein.
Viel Erfolg beim Programmieren! 🐍✨