10 einfache Python-Techniken, um Ihren Code modularer zu gestalten

Aus Micropython Referenz
Zur Navigation springen Zur Suche springen

Brechen Sie Ihren Code mit diesen Tipps in wiederverwendbare, wartbare Module auf!
von Aman Kardam
Original: https://python.plainenglish.io/10-simple-python-techniques-to-make-your-code-more-modular-ae931112c1ca
Übersetzt mit DeepL.com

Modularer Code ist eines der Geheimnisse, um wartbare, skalierbare und saubere Programme zu schreiben. Als ich mit dem Programmieren anfing, schrieb ich riesige Code-Blöcke, die alles an einer Stelle taten. Es funktionierte, aber es war ein Albtraum, ihn zu debuggen, und noch schwieriger, ihn mit der Zeit zu verbessern. Dann lernte ich etwas über Modularität - das Aufteilen von Code in unabhängige, wiederverwendbare Teile - und mein Leben als Programmierer veränderte sich zum Besseren. Jetzt möchte ich 10 einfache Python-Techniken vorstellen, die Ihnen helfen werden, Ihren Code modularer, effizienter und angenehmer zu gestalten.

1. Verwenden Sie Funktionen, um den Code zu zerlegen[Bearbeiten | Quelltext bearbeiten]

Der erste und wichtigste Schritt auf dem Weg zum modularen Code ist die Verwendung von Funktionen. Mit Funktionen können Sie einen Teil des Codes verpacken, ihn benennen und ihn überall verwenden. Anstatt Code zu wiederholen, können Sie eine Funktion immer dann aufrufen, wenn Sie einen bestimmten Vorgang benötigen.

Beispiel:[Bearbeiten | Quelltext bearbeiten]

# Non-modular code
print("Welcome!")
print("Loading data...")
# More loading code here...

# Modular approach with functions
def welcome_message():
    print("Welcome!")

def load_data():
    print("Loading data...")
    # Loading logic here...

welcome_message()
load_data()

Warum es funktioniert:[Bearbeiten | Quelltext bearbeiten]

Funktionen machen Ihren Code lesbarer und wiederverwendbar, reduzieren Doppelarbeit und machen Ihren Code einfacher zu testen und zu pflegen.

2. Erstellen von Hilfsfunktionen für sich wiederholende Aufgaben[Bearbeiten | Quelltext bearbeiten]

Wenn Sie denselben Code an mehreren Stellen schreiben, ist es an der Zeit, eine Hilfsfunktion zu erstellen. Hilfsfunktionen sind kleine Einzweckfunktionen, die allgemeine Aufgaben wie die Formatierung von Text oder die Berechnung von Prozentsätzen übernehmen.

Beispiel:[Bearbeiten | Quelltext bearbeiten]

def format_price(price):
    return f"${price:.2f}"

print(format_price(19.99))  # Output: $19.99
print(format_price(3.5))    # Output: $3.50

Warum es funktioniert:[Bearbeiten | Quelltext bearbeiten]

Hilfsfunktionen reduzieren sich wiederholenden Code und gewährleisten Konsistenz. Wenn Sie Änderungen vornehmen müssen, müssen Sie nur die Hilfsfunktion aktualisieren.

3. Organisieren von Code mit Modulen und Paketen[Bearbeiten | Quelltext bearbeiten]

Mit Python können Sie Ihren Code in Module (einzelne Python-Dateien) und Pakete (Ordner mit mehreren Modulen) einteilen. Diese Struktur erleichtert die Verwaltung großer Projekte, da zusammengehörige Funktionen und Klassen logisch gruppiert werden können.

Beispiel:[Bearbeiten | Quelltext bearbeiten]

my_project/
├──data_processing.py
├── main.py
└── utils/
 ├── __init__.py
 └── helper_functions.py

In main.py können Sie Funktionen aus helper_functions.py importieren:

from utils.helper_functions import format_price

Warum es funktioniert:[Bearbeiten | Quelltext bearbeiten]

Module und Pakete halten Ihr Projekt übersichtlich und erleichtern das Auffinden bestimmter Funktionen oder Klassen, wenn Ihre Codebasis wächst.

4. Verwenden Sie Klassen, um verwandte Daten und Verhaltensweisen zu gruppieren[Bearbeiten | Quelltext bearbeiten]

Klassen sind eine fantastische Möglichkeit, Code, der Daten und Funktionen enthält, modular zu gestalten. Mit Klassen können Sie verwandte Daten (Attribute) und Funktionen (Methoden) gruppieren und so wiederverwendbare und in sich geschlossene Objekte erstellen.

Beispiel:[Bearbeiten | Quelltext bearbeiten]

class Product:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    def display_info(self):
        print(f"Product: {self.name}, Price: ${self.price:.2f}")

# Usage
p1 = Product("Laptop", 999.99)
p1.display_info()

Warum es funktioniert:[Bearbeiten | Quelltext bearbeiten]

Klassen sind ideal, um reale Entitäten im Code darzustellen und Ihr Projekt modularer und übersichtlicher zu gestalten, insbesondere wenn Sie mit Daten und Verhaltensweisen zusammen arbeiten.

5. Harte Kodierung durch Verwendung von Konstanten und Konfigurationen vermeiden[Bearbeiten | Quelltext bearbeiten]

Fest kodierte Werte können Ihren Code unflexibel und schwer zu aktualisieren machen. Speichern Sie diese Werte stattdessen in Konstanten oder Konfigurationsdateien, damit sie leichter zu ändern und wiederzuverwenden sind.

Beispiel:[Bearbeiten | Quelltext bearbeiten]

TAX_RATE = 0.07

def calculate_total(price):
    return price * (1 + TAX_RATE)

print(calculate_total(100))  # Output: 107.0

Warum es funktioniert:[Bearbeiten | Quelltext bearbeiten]

Durch die Speicherung von Werten in Konstanten oder Konfigurationsdateien können Sie Änderungen an einer Stelle vornehmen, ohne die gesamte Codebasis zu verändern, wodurch Ihr Code leichter zu aktualisieren und zu verwalten ist.

6. Verwenden Sie Dekoratoren, um die Funktionalität zu erweitern[Bearbeiten | Quelltext bearbeiten]

Dekoratoren sind eine fortschrittliche Funktion, die es Ihnen ermöglicht, Funktionen zu bestehenden Funktionen hinzuzufügen, ohne deren Struktur zu verändern. Sie eignen sich hervorragend für Aufgaben wie Protokollierung, Zeitsteuerung und Zugriffskontrolle.

Beispiel:[Bearbeiten | Quelltext bearbeiten]

import time

def timer(func):

    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"Function {func.__name__} took {end_time - start_time:.4f} seconds")
        return result

    return wrapper

@timer
def compute():
    time.sleep(2)
    return "Done"

print(compute())  # Output: Function compute took 2.0000 seconds

Warum es funktioniert:[Bearbeiten | Quelltext bearbeiten]

Decorators fügen Ihren Funktionen wiederverwendbare Funktionen hinzu, ohne den ursprünglichen Funktionscode zu ändern, und machen Ihren Code sowohl modular als auch flexibler.

7. Nutzen Sie Listenkomprehensionen für sauberere Schleifen[Bearbeiten | Quelltext bearbeiten]

Mit List Comprehensions können Sie Listen in einer einzigen Zeile erstellen, wodurch Ihr Code lesbarer und prägnanter wird. Sie sind perfekt für einfache Operationen und das Filtern von Daten.

Beispiel:[Bearbeiten | Quelltext bearbeiten]

# Traditional loop
squares = []
for x in range(10):
    squares.append(x ** 2)

# Using a list comprehension
squares = [x ** 2 for x in range(10)]

Warum es funktioniert:[Bearbeiten | Quelltext bearbeiten]

List Comprehensions halten Ihre Schleifen kompakt, reduzieren die Anzahl der Codezeilen und verbessern die Lesbarkeit. Bei komplexen Schleifen sind reguläre Schleifen jedoch oft besser lesbar.

8. Anwendung von *args und **kwargs für flexible Funktionen[Bearbeiten | Quelltext bearbeiten]

Mit *args und **kwargs können Sie flexible Funktionen erstellen, die eine beliebige Anzahl von Positions- oder Schlüsselwortargumenten akzeptieren. Dies ist besonders nützlich, wenn Sie optionale Parameter benötigen.

Beispiel:[Bearbeiten | Quelltext bearbeiten]

def greeting(*names, **options):
    for name in names:
        msg = f"Hello, {name}"
        if options.get("formal"):
            msg += "!"
        print(msg)

greeting("Alice", "Bob", formal=True)

Warum es funktioniert:[Bearbeiten | Quelltext bearbeiten]

*args und **kwargs machen Funktionen modularer und anpassungsfähiger an verschiedene Szenarien, indem sie flexible Parameter erlauben.

9. Trennen Sie Logik- und Darstellungsebenen[Bearbeiten | Quelltext bearbeiten]

Die Trennung von Logik (Berechnungen, Datenverarbeitung) und Präsentation (Ausgabe von Daten, Anzeige von Meldungen) macht Ihren Code modularer und anpassungsfähiger. Durch die Trennung dieser Aspekte können Sie eine Ebene aktualisieren, ohne die andere zu beeinträchtigen.

Beispiel:[Bearbeiten | Quelltext bearbeiten]

def calculate_total(price, tax_rate):
    return price * (1 + tax_rate)

def display_total(total):
    print(f"The total is ${total:.2f}")

# Usage
price = 100
total = calculate_total(price, 0.07)
display_total(total)

Warum es funktioniert:[Bearbeiten | Quelltext bearbeiten]

Durch die Trennung von Logik und Präsentation bleibt Ihr Code modular und flexibler, insbesondere wenn Sie das Präsentationsformat aktualisieren oder ändern müssen, ohne die Berechnungen zu verändern.

10. Schreiben Sie Tests für wiederverwendbare Module[Bearbeiten | Quelltext bearbeiten]

Schließlich ist eine modulare Codebasis leichter zu testen und zu warten. Indem Sie Tests für einzelne Funktionen oder Module schreiben, können Sie sicherstellen, dass jeder Teil Ihres Programms wie erwartet funktioniert, was es einfacher macht, Fehler zu finden und Probleme in der Zukunft zu vermeiden.

Beispiel mit unittest:[Bearbeiten | Quelltext bearbeiten]

import unittest

def add(a, b):
    return a + b

class TestMathFunctions(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(2, 3), 5)
        self.assertEqual(add(-1, 1), 0)

if __name__ == "__main__":
    unittest.main()

Warum es funktioniert:[Bearbeiten | Quelltext bearbeiten]

Das Schreiben von Tests für einzelne Funktionen trägt dazu bei, dass Ihr Code zuverlässig und leicht zu debuggen ist. Jede Funktion kann unabhängig getestet werden, wodurch es einfacher wird, Probleme zu finden, wenn sie auftreten. Aufbau einer modulareren, wartungsfreundlicheren Codebasis

Zusammenfassung[Bearbeiten | Quelltext bearbeiten]

Beim Aufbau von modularem Code geht es nicht nur darum, kleinere Codestücke zu schreiben - es geht darum, Code zu schreiben, der leicht zu lesen, zu testen, wiederzuverwenden und zu warten ist. Durch den Einsatz von Techniken wie Funktionen, Hilfsmethoden, Klassen und sogar Dekorateuren können Sie eine besser organisierte, flexible Codebasis schaffen.

Beginnen Sie mit ein paar dieser Techniken und integrieren Sie sie nach und nach in Ihre Projekte. Sie werden bald feststellen, dass modularer Code einfacher zu verstehen, zu warten und mit anderen zu teilen ist. Wenn Sie sich also das nächste Mal hinsetzen, um etwas Python zu schreiben, denken Sie modular und genießen Sie die Vorteile eines saubereren, besser zu verwaltenden Codes!

Navigation[Bearbeiten | Quelltext bearbeiten]

Zurück zur Pythonseite
Zurück zur Hauptseite