7. Module
Module sind Dateien mit Python-Quellcode, die jeweils über ihren Namen
in anderen Programmen importiert werden können, d.h. alle ihre definierten
Variablen und Funktionen werden zugänglich.
Ein Modul enthält eine Folge von Anweisungen, d.h. üblicherweise
Deklarationen, Funktionen und Klassen. Auf der Platte ist es unter Modulname.py
zu finden.
Beispiel (Datei faculty.py):
def facultyIter(n):
fact = 1
for i in range(2, n+1):
fact = fact*i
return fact
def facultyRec(n):
if n <= 1:
return 1
else:
return n*facultyRec(n-1)
Zum Importieren eines ganzen Moduls dient der Befehl import Modulname.
Danach kann auf alle Felder des Moduls über Modulname.feldname
zugegriffen werden.
Möchte man sich das ständige Dazuschreiben des Modulnamens
ersparen, kann man auch beliebig viele Modulfelder importieren:
from faculty import facultyIter
# importiert die Funktion facultyIter
# Zugriff: facultyIter(n)
from faculty import *
# importiert alle Felder aus faculty
# Zugriff wie oben
Durch letztere Optionen werden die Felder direkt im Namespace des importierenden
Moduls angelegt, sodaß Namenskonflikte entstehen können. Auch
das importierte Modul als solches ist nicht mehr bekannt, d.h. faculty.facultyIter(n)
funktioniert gar nicht.
Aus diesen Gründen wird empfohlen, nach Möglichkeit das ganze
Modul zu importieren.
Namespaces
Ein Namespace in Python bezeichnet eine Tabelle (derzeit ein Dictionary),
das die Beziehung zwischen Namen und Objekten herstellt. Zu jedem Zeitpunkt
gibt es genau 3 verschachtelte Namespaces:
-
der Namespace der eingebauten (built-in) Funktionen und Variablen
-
der Namespace des aktuellen Moduls (global NS)
-
der Namespace der momentan laufenden Methode und evtl. der aktuellen Klasse
(local NS)
Bei Referenzierung eines Feldes wird zuerst im lokalen (innersten) Namespace
gesucht, und von dort an nach außen. Man beachte, daß es bei
Zuweisungen eine Besonderheit zu beachten gibt:
Wird an eine Variable zugewiesen, die im lokalen Namespace nicht namentlich
bekannt ist, wird nicht mehr weitergesucht, sondern in jedem Fall eine
neue Variable im lokalen Namespace angelegt. Möchte man statt dessen
mit einer globalen Variable arbeiten, so muß hierfür das Schlüsselwort
global verwendet werden.
Der dir-Befehl
Der dir-Befehl gehört zu den in Python eingebauten Funktionen
und liefert für ein Modul bzw. eine Klasse die darin deklarierten
Felder als Liste.
Beispiel:
>>> dir(faculty)
['__builtins__', '__doc__', '__file__', '__name__', 'facultyIter',
'facultyRec']
Damit erhält man z.B. alle m Modul faculty definierten Variablen
und Funktionen.
Packages
Um Module noch weiter untereinander (z.B. nach Einsatzzweck) zu gliedern,
gibt es die Möglichkeit, mehrere Module in einem Package zusammenzufassen.
Ein Package besteht im wesentlichen aus einem Verzeichnis mit Modulen und
einem (möglicherweise leeren) Package-Initialisierer namens __init__.py.
Packages können geschachtelt werden.
Ein Modul aus einem Package wird wie im folgenden Beispiel angesprochen:
Sounds.Formats.wavread -> Modul wavread, das im Package
Sound
und dessen Subpackage Formats liegt und daher auf der Platte in
...\Sounds\Formats\wavread.py zu finden ist.