7  Python-Bausteine

Im Python-Entwicklungsprozess ist es hilfreich, die Rollen von Modulen, Paketen und Bibliotheken zu verstehen, um Projekte effektiv zu organisieren und zu verwalten.

Die Verwendung dieser Bausteine hilft nicht nur dabei, den Code sauber und verständlich zu halten, sondern verbessert auch die Zusammenarbeit in Teams. Sie ermöglicht es, Arbeit einfach zu teilen und zu integrieren.

7.1 Module in Python

Module sind einzelne Python-Dateien, die Definitionen und Implementierungen von Variablen und Funktionen enthalten, die in verschiedenen Programmen wiederverwendet werden können.

Einige wichtige Standardmodule sind:

  • os: Funktionen zur Interaktion mit dem Betriebssystem.
  • datetime: Behandelt Datums- und Zeitoperationen.
  • math: Enthält mathematische Funktionen.
  • json: Verarbeitet JSON-Daten.

Module helfen, den Code modular zu gestalten, was seine Wartbarkeit und Lesbarkeit verbessert.

Wir können uns Python wie eine gut ausgestattete Küche vorstellen:

  • Die Küche ist die Python-Umgebung.
  • Rezeptbücher sind Python-Module, die jeweils Sets von Rezepten (Funktionen) für spezifische Aufgaben enthalten.
  • Zutaten stellen Datentypen und Variablen dar.
  • Kochutensilien sind Methoden aus den Modulen, die helfen, die Zutaten zu manipulieren.

Beim Kochen werden spezifische Werkzeuge und Zutaten für bestimmte Aufgaben oder Rezepte ausgewählt. Ähnlich repräsentieren in Python diese Werkzeuge und Zutaten Module—Sammlungen vorgefertigter Funktionen (Rezepte), die zur Durchführung allgemeiner Aufgaben verwendet werden können.

7.1.1 Variablen

Variablen sind Benannte Speicherorte, die Daten im Speicher halten. Beispielsweise können wir mit dem Befehl x = 5 der Variable x den Wert 5 zuweisen:

x = 5

Wenn wir die Variable mit dem Befehl print() ausgeben, können wir den zugewiesenen Wert sehen:

print(x)
5

7.1.2 Funktionen

Funktionen sind wiederverwendbare Codeabschnitte, die eine bestimmte Aktion ausführen. Wir können bspw. eine Funktion zur Berechnung des Quadrats einer Zahl erstellen. Der Parameter zahl ist einfach ein Platzhalter, der eine Zahl repräsentiert, deren Quadrat berechnet werden soll:

def quadrat(zahl):
    """Berechnen und zurückgeben des Quadrats einer Zahl."""
    return zahl * zahl
  1. def quadrat(zahl):
    • def ist ein Schlüsselwort in Python, das verwendet wird, um eine Funktion zu definieren.
    • quadrat ist der Name der Funktion.
    • (zahl) sind die Klammern, die den Parameter der Funktion enthalten. In diesem Fall gibt es einen Parameter namens zahl. Dies ist lediglich ein Platzhalter und teilt der Funktion mit, dass ein Wert eingegeben muss.
  2. """Berechnen und zurückgeben des Quadrats einer Zahl."""
    • Dies ist ein Docstring (Dokumentations-String). Er beschreibt, was die Funktion tut.
    • Docstrings werden in dreifachen Anführungszeichen eingeschlossen und dienen zur Dokumentation der Funktion.
  3. return zahl * zahl
    • return ist ein Schlüsselwort, das angibt, was die Funktion zurückgeben soll.
    • zahl * zahl berechnet das Quadrat der Eingabezahl, indem die Zahl mit sich selbst multipliziert wird.
    • Das Ergebnis dieser Berechnung wird von der Funktion zurückgegeben.

Damit die Funktion definiert werden kann, muss die Einrückung korrekt vorgenommen werden. Der Standard in Python ist die Verwendung von 4 Leerzeichen pro Einrückungsebene. Funktionen und andere Steuerstrukturen verwenden Einrückungen, um anzugeben, welcher Code innerhalb des Blocks gehört.

Einrückung in Python

Einrückung ist in Python nicht nur eine Stilfrage; sie hat eine syntaktische Bedeutung. Python verwendet Einrückungen, um Codeblöcke zu definieren. Die korrekte Verwendung von Einrückungen ist entscheidend, damit der Code wie erwartet ausgeführt wird.

Die Funktion kann nun mit dem definierten Funktionsnamen (hier quadrat) in unserem Code verwendet werden:

quadrat(2)
4

7.1.3 Import von Modulen

In Python gibt es verschiedene Möglichkeiten, Module zu importieren und deren Funktionalitäten und Konstanten zu nutzen. Hier zwei gängige Methoden:

  1. Import des gesamten Moduls
# Import des gesamten Moduls
import math
# Verwendung einer Funktion aus dem Modul
result = math.sqrt(2)
# Ausgabe der Variable
print(result) 
1.4142135623730951

In diesem Beispiel wird das gesamte math-Modul importiert. Um auf Funktionen des Moduls zuzugreifen, wird die Punktnotation verwendet: math.funktionsname(). Hier wird die Quadratwurzelfunktion sqrt() des math-Moduls aufgerufen, um die Quadratwurzel von 2 zu berechnen.

  1. Selektiver Import spezifischer Elemente
# Selektive Importmethode
from math import sqrt
# Verwendung der Funktion 
result = sqrt(2)
# Ausgabe der Variable
print(result)  
1.4142135623730951

Diese Methode importiert nur die spezische Methode sqrt aus dem math-Modul. Der Vorteil hierbei ist, dass sqrt direkt ohne Voranstellung des Modulnamens verwendet werden kann. Dies kann den Code lesbarer machen, besonders wenn das importierte Element häufig verwendet wird.

Unterschiede zwischen den Importmethoden
  • Bei import math wird das gesamte Modul importiert. Alle Funktionen und Konstanten sind verfügbar, müssen aber mit math. aufgerufen werden.

  • Bei from math import sqrt wird nur die Methode sqrt importiert. Sie kann direkt verwendet werden, aber andere Elemente des math-Moduls sind nicht verfügbar, es sei denn, sie werden ebenfalls explizit importiert.

Die Wahl der Importmethode hängt von verschiedenen Faktoren ab:

  1. Häufigkeit der Verwendung: Wenn nur wenige Funktionen eines Moduls benötigt werden, kann der selektive Import sinnvoll sein.

  2. Namenskonflikte: Der Import des gesamten Moduls mit import math vermeidet potenzielle Namenskonflikte mit anderen Variablen oder Funktionen im Code.

  3. Codeklarheit: In manchen Fällen kann die explizite Verwendung des Modulnamens (z.B. math.sqrt()) die Herkunft einer Funktion deutlicher machen.

Bewährte Praxis

Es ist generell empfehlenswert, Importe am Anfang einer Python-Datei zu platzieren. Dies verbessert die Übersichtlichkeit und macht auf einen Blick ersichtlich, welche externen Module und Funktionen im Code verwendet werden.

Durch die Verwendung von Modulen können komplexe Berechnungen und Operationen mit wenigen Zeilen Code durchgeführt werden, was die Effizienz und Lesbarkeit des Programms erheblich verbessert.

7.2 Pakete in Python

Pakete in Python sind Verzeichnisse von Python-Modulen mit einer speziellen Datei namens __init__.py. Sie ermöglichen es, mehrere Module zusammenzupacken, wodurch es einfacher wird, eine Sammlung von Modulen als eine Einheit zu verwalten und zu verteilen.

Ein typisches Paket könnte so strukturiert sein:

mein_paket/
    __init__.py
    modul1.py
    modul2.py
    unterpaket/
        __init__.py
        modul3.py

Wenn ein Modul einem Rezeptbuch ähnelt, ist ein Paket vergleichbar mit einer Sammlung von Rezeptbüchern. Jedes Buch (Modul) konzentriert sich auf einen bestimmten Bereich, aber zusammen bieten sie eine breite Palette kulinarischer Optionen.

7.2.1 Import von Paketen

Für Data Science sind einige grundlegende Pakete, einschließlich ihrer Importanweisungen mit den gängigen Bezeichungen (Aliase):

Paket Funktion Import
numpy Numerische Berechnungen und Arrayoperationen import numpy as np
pandas Datenmanipulation und -analyse import pandas as pd
matplotlib Datenvisualisierung import matplotlib.pyplot as plt
seaborn Datenvisualisierung import seaborn as sns
altair Datenvisualisierung import altair as alt
scikit-learn Machine-Learning-Algorithmen from sklearn import ...

Ein Alias ist ein alternativer Name, der beim Importieren eines Moduls verwendet wird. Diese Aliase sind Konventionen in der Data-Science-Community. Sie ermöglichen es, die Pakete mit kürzeren Namen zu referenzieren, was den Code lesbarer und einfacher zu schreiben macht. Zum Beispiel können wir nach dem Import von import numpy as np den Code np.array() statt numpy.array() schreiben.

Bei scikit-learn (sklearn) steht from sklearn import ..., weil:

  1. Scikit-learn ist ein umfangreiches Paket mit vielen Untermodulen.
  2. Üblicherweise importiert man nur die spezifischen Funktionen, die man benötigt.
  3. Die genaue Importanweisung hängt vom jeweiligen Anwendungsfall ab.

Beispiel zur Verwendung eines Pakets:

# Import des gesamten Pakets
import numpy as np
# Erstellung eines Arrays
daten = np.array([1, 2, 3, 4, 5])
# Berechnung des Mittelwerts
daten_mittelwert = np.mean(daten)
# Ausgabe des Mittelwerts
print(daten_mittelwert)
3.0
  1. import numpy as np: Diese Zeile importiert das gesamte NumPy-Paket und weist ihm das Alias ‘np’ zu. NumPy ist eine grundlegende Bibliothek für numerische Berechnungen in Python.

  2. daten = np.array([1, 2, 3, 4, 5]): Hier wird ein NumPy-Array erstellt und als daten gespeichert. Die Funktion np.array() konvertiert die übergebene Python-Liste [1, 2, 3, 4, 5] in ein NumPy-Array. NumPy-Arrays sind effizienter für numerische Operationen als normale Python-Listen.

  3. daten_mittelwert = np.mean(daten): Diese Zeile berechnet den Mittelwert des zuvor erstellten Arrays mithilfe der NumPy-Funktionmean(). Der Mittelwert wird dann der Variablendaten_mittelwert`zugewiesen.

  4. print(daten_mittelwert): Diese Zeile gibt den Wert der Variable daten_mittelwert aus.

7.3 Bibliotheken in Python

Eine Bibliothek ist eine Sammlung von Paketen und Modulen, die zusammen eine umfangreiche Funktionalität bereitstellen. Bibliotheken bieten oft Lösungen für spezifische Problemfelder und können viele Module und Pakete umfassen.

In der Küchenanalogie wäre eine Bibliothek eine komplette Küche, ausgestattet mit einer Vielzahl von Werkzeugen und Zutaten für verschiedene Kochstile und -techniken. Es ist eine umfassende Sammlung, die ermöglicht, nahezu jedes Gericht zu kochen, das man sich vorstellen kann.

Einige wichtige Python-Bibliotheken:

  • SciPy: Bietet wissenschaftliche und technische Berechnungen, baut auf numpy auf.

  • TensorFlow und PyTorch: Bibliotheken für maschinelles Lernen und neuronale Netze.

Beispiel zur Verwendung einer Bibliothek:

# Import der benötigten Funktion aus SciPy
from scipy import special
# Berechnung der Fakultät von 5
ergebnis = special.factorial(5)
# Ausgabe des Ergebnisses
print(ergebnis)
120.0

Um die nachfolgenden Anleitungen zu vereinfachen, werden wir nicht immer streng zwischen Bibliotheken und Paketen unterscheiden, sondern hauptsächlich den Begriff Python-Pakete verwenden, wenn wir Python-Software importieren (auch wenn es sich dabei um eine Bibliothek handelt).