»Divide et impera!« – Julius Caesar
11 Modularisierung
Unter Modularisierung versteht man die Aufteilung des Quelltextes in einzelne Teile, sogenannte Module. Grundsätzlich gibt es zwei Arten von Modulen:
Zum einen kann jedes Python-Programm sogenannte Bibliotheken (engl. Libraries) einbinden. Eine Bibliothek dient häufig einem ganz bestimmten Zweck, wie etwa der Arbeit mit Dateien eines bestimmten Dateiformats, und stellt üblicherweise Datentypen oder Funktionen bereit, die nach dem Einbinden verwendet werden können. Es ist möglich, eigene Bibliotheken zu schreiben oder eine Bibliothek eines Drittanbieters zu installieren. Ein gutes Argument für Python ist die umfangreiche Standardbibliothek, die im Lieferumfang enthalten ist. Sie bietet eine hohe Grundfunktionalität, die in jeder Python-Umgebung verfügbar ist.
Die zweite Möglichkeit zur Modularisierung sind lokale Module. Darunter versteht man die Kapselung einzelner Programmteile – auch hier üblicherweise Datentypen oder Funktionen – in eigene Programmdateien. Diese Dateien können wie Bibliotheken eingebunden werden, sind aber in keinem anderen Python-Programm verfügbar. Diese Form der Modularisierung hilft bei der Programmierung ungemein, da sie dem Programmierer die Möglichkeit gibt, sehr langen Programmcode überschaubar auf verschiedene Programmdateien aufzuteilen.
11.1 Einbinden externer Programmbibliotheken 

Eine Bibliothek, sei es ein Teil der Standardbibliothek oder eine selbst geschriebene, kann mithilfe der import-Anweisung eingebunden werden. Wir werden in den Beispielen hauptsächlich das Modul math der Standardbibliothek verwenden. Das ist ein Modul, das mathematische Funktionen wie sin oder cos sowie mathematische Konstanten wie pi bereitstellt. Um sich diese Funktionalität in einem Programm zunutze machen zu können, ist folgende import-Anweisung nötig:
import mathEine import-Anweisung besteht aus dem Schlüsselwort import, gefolgt von einem Modulnamen. Es können mehrere Module gleichzeitig eingebunden werden, indem diese, durch Kommata getrennt, hinter das Schlüsselwort geschrieben werden:
import math, randomDies ist äquivalent zu:
import math import random
Obwohl eine import-Anweisung prinzipiell überall im Quellcode stehen kann, ist es der Übersichtlichkeit halber sinnvoll, alle Module zu Beginn des Quelltextes einzubinden.
Nachdem eine Bibliothek eingebunden wurde, wird für diese ein neuer Namensraum mit dem Namen der Bibliothek erstellt. Über diesen Namensraum sind alle Funktionen, Datentypen und Konstanten der Bibliothek im Programm nutzbar. Mit einem Namensraum kann wie mit einer Instanz umgegangen werden, und die Funktionen der Bibliothek können wie Methoden des Namensraums verwendet werden. So bindet folgendes Beispielprogramm die Bibliothek math ein und berechnet den Sinus von der Kreiszahl π :
import math print math.sin(math.pi)
Es ist möglich, den Namen des Namensraums durch eine import/as-Anweisung festzulegen:
import math as mathematik print mathematik.sin(mathematik.pi)
Beachten Sie, dass dieser Name keine zusätzliche Option ist, sondern das Modul math nun ausschließlich über den Namensraum mathematik erreichbar ist.
Des Weiteren kann die import-Anweisung so verwendet werden, dass kein eigener Namensraum für die eingebundene Bibliothek erzeugt wird, sondern alle Elemente dieser Bibliothek im globalen Namensraum des Programms zur Verfügung stehen:
from math import * print sin(pi)
Wenn die import-Anweisung in dieser Weise verwendet wird, sollten Sie beachten, dass keine Referenzen, Funktionen oder Instanzen des einzubindenden Moduls in den aktuellen Namensraum importiert werden, wenn sie mit einem Unterstrich beginnen. Diese Elemente eines Moduls werden als privat und damit als modulintern angesehen.
| Hinweis |
Der Sinn von Namensräumen ist es, thematisch abgegrenzte Bereiche, also zum Beispiel eine Bibliothek, zu kapseln und über einen gemeinsamen Namen anzusprechen. Wenn Sie den kompletten Inhalt einer Bibliothek in den globalen Namensraum eines Programms einbinden, kann es vorkommen, dass die Bibliothek mit eventuell vorhandenen Referenzen interferiert. In einem solchen Fall werden die bereits bestehenden Referenzen kommentarlos überschrieben, wie das folgende Beispiel zeigt:
>>> pi = 1234 >>> pi 1234 >>> from math import * >>> pi 3.1415926535897931 |
Im Hinweiskasten wurde gesagt, dass man die Anzahl der in den globalen Namensraum importierten Objekte möglichst gering halten sollte. Aus diesem Grund ist die oben geschriebene Form der from/import-Anweisung nicht gerade praktikabel. Es ist aber möglich, anstatt des Sterns eine Liste von zu importierenden Elementen der Bibliothek anzugeben:
from math import sin, pi print sin(pi)
In diesem Fall werden ausschließlich die Funktion sin und die Konstante pi in den globalen Namensraum importiert. Auch hier ist es möglich, durch ein dem Namen nachgestelltes as einen eigenen Namen festzulegen:
from math import sin as hallo, pi as welt print hallo(welt)
So viel zum Einbinden externer Bibliotheken. Sie werden die Standardbibliothek von Python im dritten Teil dieses Buches noch ausführlich kennenlernen.




bestellen





