8 Module und Packages

8.1 Einführung in Module und Packages

Module und Packages sind zentrale Konzepte in Python, die es ermöglichen, Code besser zu organisieren, wiederverwendbar zu gestalten und die Lesbarkeit zu erhöhen.

8.2 Erstellen und Importieren von Modulen

Erstellen eigener Module: Um ein eigenes Modul zu erstellen, schreiben Sie einfach Python-Code (wie Funktionen, Klassen oder Variablen) in eine separate Datei mit der Dateiendung .py. Die Datei kann dann als Modul behandelt und in anderen Python-Skripten importiert werden. Zum Beispiel:

# my_module.py
def say_hello(name):
    return f"Hallo, {name}!"

Importieren von Modulen mit ‘import’: Um auf die Funktionen, Klassen oder Variablen in einem Modul zuzugreifen, müssen Sie das Modul in Ihrem Python-Code importieren. Verwenden Sie dazu das Schlüsselwort import, gefolgt vom Modulnamen:

# main.py
import my_module

greeting = my_module.say_hello("Anna")
print(greeting)  # Output: Hallo, Anna!

Verwendung von ‘from’ und ‘import’: Wenn Sie nur bestimmte Funktionen oder Klassen aus einem Modul importieren möchten, können Sie das Schlüsselwort from in Kombination mit import verwenden:

# main.py
from my_module import say_hello

greeting = say_hello("Anna")
print(greeting)  # Output: Hallo, Anna!

Diese Methode ermöglicht es Ihnen, die Funktionen oder Klassen direkt zu verwenden, ohne den Modulnamen als Präfix angeben zu müssen. Achten Sie jedoch darauf, keine Namenskonflikte mit bereits vorhandenen Funktionen oder Klassen in Ihrem Code zu erzeugen.

8.3 Namensräume und Scopes

Namensräume und Scopes sind wichtig um zu verstehen wie Variablen und Funktionen im Code verwaltet werden. Sie ermöglichen es, Variablen mit dem gleichen Namen in verschiedenen Kontexten zu verwenden, ohne Konflikte zu erzeugen.

Globaler und lokaler Scope: 1. Globaler Scope: Der globale Scope ist der Bereich eines Python-Skripts, in dem globale Variablen definiert sind. Globale Variablen sind Variablen, die außerhalb von Funktionen oder Klassen im Hauptkörper des Skripts definiert sind. Sie können im gesamten Skript und in den Funktionen und Klassen, die im Skript definiert sind, zugegriffen und geändert werden.

  1. Lokaler Scope: Der lokale Scope ist der Bereich innerhalb einer Funktion oder einer Methode, in dem lokale Variablen definiert sind. Lokale Variablen sind Variablen, die innerhalb einer Funktion oder Methode definiert und nur innerhalb dieses Bereichs verwendet werden können. Sobald die Funktion oder Methode beendet ist, werden die lokalen Variablen gelöscht und können nicht mehr zugegriffen werden.
# Globale Variable
my_var = 10

def my_function():
    # Lokale Variable
    local_var = 5
    print("Innerhalb der Funktion:", my_var, local_var)

my_function()
print("Außerhalb der Funktion:", my_var)
# Output:
# Innerhalb der Funktion: 10 5
# Außerhalb der Funktion: 10

Namensraum von Modulen: Jedes Python-Modul hat seinen eigenen Namensraum, der die im Modul definierten Funktionen, Klassen und Variablen enthält. Wenn Sie ein Modul importieren, können Sie auf dessen Namensraum zugreifen, um die darin definierten Funktionen, Klassen und Variablen zu verwenden. Um auf Elemente im Namensraum eines Moduls zuzugreifen, verwenden Sie den Modulnamen als Präfix, gefolgt von einem Punkt und dem Namen des Elements:

# my_module.py
def my_function():
    return "Hallo Welt!"

# main.py
import my_module

result = my_module.my_function()
print(result)  # Output: Hallo Welt!

Sie können auch das from ... import ...-Statement verwenden, um direkt auf die gewünschten Funktionen, Klassen oder Variablen im Modulnamensraum zuzugreifen:

# main.py
from my_module import my_function

result = my_function()
print(result)  # Output: Hallo Welt!

8.4 Untersuchung von Modulen und Packages

Um mehr Informationen über die in einem Modul oder Package verfügbaren Funktionen, Klassen und Variablen zu erhalten, können Sie die Funktion dir() und das Attribut __name__ verwenden.

import math

print(dir(math))
# Output: ['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', ...]
# my_module.py
print(__name__)  # Output: my_module

Wenn das Python-Skript direkt ausgeführt wird (also nicht importiert), hat __name__ den Wert '__main__'. Dies kann verwendet werden, um Code nur auszuführen, wenn das Skript direkt ausgeführt wird, und nicht, wenn es als Modul importiert wird:

# my_module.py
def main():
    print("Das Modul wird direkt ausgeführt.")

if __name__ == '__main__':
    main()
else:
    print("Das Modul wird importiert.")

In diesem Beispiel wird die Funktion main() nur aufgerufen, wenn my_module.py direkt ausgeführt wird. Wenn es als Modul importiert wird, wird stattdessen die Nachricht “Das Modul wird importiert.” angezeigt.