Module
Importieren von Modulen
Python ist eine mächtige Sprache und bietet eine große Menge von vorgefertigten Funktionen an, z. B. für mathematische Berechnungen, Darstellung von Grafik etc. Da aber ein Entwickler nicht immer alle diese Funktionalitäten benötigt und damit es übersichtlich bleibt, sind sie in abgeschlossenen Einheiten, sog. Modulen organisiert, die man in das Programm laden muss, um sie zu benutzen.
Um Funktionalitäten aus einem Modul nutzen zu können, muss man das jeweilige Modul in das eigene Programm importieren. Hierzu dient das Schlüsselwort import.
- Zusätzliche Funktionen sind in Modulen organisiert
- Module müssen für die Verwendung mit
importgeladen werden
# Modul math laden
import math
# Funktion sqrt aus math verwenden
s = math.sqrt(2)
print(s) # -> 1.4142135623730951
Um Namenskonflikte zu vermeiden, muss man nach einem import den Namen des Moduls vor den Namen der Funktion setzen, die man aufrufen möchte. Im Beispiel sieht man das an der Funktion sqrt für das Wurzelziehen, die aus dem Modul math stammt und deswegen mit math.sqrt() aufgerufen werden muss.
Es kommt vor, dass man ein Modul importiert, die Aufrufe der Funktionen aber mit einem anderen Namen (Alias) versehen möchte. Dies ist möglich, indem man nach dem import mod einen neuen Namen mit as alias angibt.
- Man kann das Modul beim Importieren umbenennen (Alias)
- Syntax:
import x as y - Modul ist nur noch unter dem Alias ansprechbar
# Modul math mit dem Namen m laden
import math as m
# Funktion sqrt aus math verwenden
s = m.sqrt(2)
print(s) # -> 1.4142135623730951
Der Alias ersetzt den Namen des Moduls im aktuellen Programm, sodass man den ursprünglichen Namen nicht mehr verwenden kann.
import math as m
s = math.sqrt(2) # Fehler
# NameError: name 'math' is not defined
Will man Funktionen f aus einem Modul m ohne Prefix verwenden, kann man sie mit from x import f importieren. Die Funktion ist dann ohne vorangestellten Namen direkt nutzbar.
from mod import funcerlaubt es, eine einzelne Funktionfuncaus dem Modulmodzu importieren- Funktion ist dann ohne Prefix nutzbar
# Funktion sqrt aus dem Modul math holen
from math import sqrt
# Funktion sqrt wie eine lokale Funktion verwenden
s = sqrt(2)
print(s) # -> 1.4142135623730951
Eigene Module
Ein Python-Modul ist nichts meta-magisches, sondern kann von jeder Entwicklerin selbst erstellt werden. Ein Modul ist einfach nur eine Datei mit dem Modulnamen und der Endung .py
- Ein Python-Modul ist eine Datei, die durch
importgeladen wird - Name der Datei entspricht dem Namen des Moduls +
.py
def fib(n):
a, b = 0, 1
while b < n:
print(b, end=' ')
a, b = b, a+b
print()
import fibo
fibo.fib(10)
# -> 1 1 2 3 5 8
Die Datei, die ein Modul enthält, ist ein gültiges Python-Skript. Sie kann also neben Funktionen auch Befehle enthalten, die direkt ausgeführt werden können. Beim Laden eines Moduls werden diese Befehle ebenfalls ausgeführt und können dazu dienen das Modul zu initialisieren.
In manchen Fällen enthält ein Modul aber Code, der nur laufen soll, wenn das Modul als Skript ausgeführt wird und der gerade nicht beim Laden zuschlagen soll.
Diesen Code kann man durch ein if bedingen, dass den Wert der Variable __name__ prüft. Diese Variable wird von Python selbst gesetzt (das wird durch die Underscores __ angezeigt) und hat
- in einem Modul den Namen des Moduls als Wert und
- in einem Skript den Wert
"__main__".
- Code im Modul wird beim Laden des Moduls ausgeführt
if __name__ == "__main__":-Konstruktion verhindert dies
def fib(n):
a, b = 0, 1
while b < n:
print(b, end=' ')
a, b = b, a+b
print()
if __name__ == "__main__":
print("Wird beim import nicht ausgeführt")