Get started learning Python with DataCamp's free Intro to Python tutorial. Learn Data Science by completing interactive coding challenges and watching videos by expert instructors. Start Now!

This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join 11 million other learners and get started learning Python for data science today!

Good news! You can save 25% off your Datacamp annual subscription with the code LEARNPYTHON23ALE25 - Click here to redeem your discount

Module und Pakete


In der Programmierung ist ein Modul ein Softwareteil, der eine bestimmte Funktionalität besitzt. Zum Beispiel kann beim Erstellen eines Ping-Pong-Spiels ein Modul für die Spiellogik verantwortlich sein, während ein anderes Modul das Spiel auf dem Bildschirm darstellt. Jedes Modul besteht aus einer separaten Datei, die unabhängig bearbeitet werden kann.

Schreiben von Modulen

Module in Python sind einfach Python-Dateien mit einer .py-Endung. Der Name des Moduls ist derselbe wie der Dateiname. Ein Python-Modul kann eine Reihe von Funktionen, Klassen oder Variablen definieren und implementieren. Das obige Beispiel umfasst zwei Dateien:

mygame/

  • mygame/game.py

  • mygame/draw.py

Das Python-Skript game.py implementiert das Spiel. Es verwendet die Funktion draw_game aus der Datei draw.py oder mit anderen Worten, das draw-Modul, das die Logik zum Zeichnen des Spiels auf dem Bildschirm implementiert.

Module werden mit dem import-Befehl aus anderen Modulen importiert. In diesem Beispiel könnte das game.py-Skript folgendermaßen aussehen:

Der draw-Modul könnte folgendermaßen aussehen:

In diesem Beispiel importiert das game-Modul das draw-Modul, wodurch es die in diesem Modul implementierten Funktionen nutzen kann. Die main-Funktion verwendet die lokale Funktion play_game, um das Spiel zu starten, und zeichnet dann das Ergebnis des Spiels mit einer im draw-Modul implementierten Funktion namens draw_game. Um die Funktion draw_game aus dem draw-Modul zu verwenden, müssen wir angeben, in welchem Modul die Funktion implementiert ist, indem wir den Punkt-Operator verwenden. Um auf die draw_game-Funktion aus dem game-Modul zu verweisen, müssen wir das draw-Modul importieren und dann draw.draw_game() aufrufen.

Wenn die import draw-Anweisung ausgeführt wird, sucht der Python-Interpreter in dem Verzeichnis, in dem das Skript ausgeführt wurde, nach einer Datei mit dem Modulnamen und der .py-Endung. In diesem Fall wird nach draw.py gesucht. Wenn es gefunden wird, wird es importiert. Wenn es nicht gefunden wird, wird weiter nach eingebauten Modulen gesucht.

Vielleicht ist Ihnen aufgefallen, dass beim Importieren eines Moduls eine .pyc-Datei erstellt wird. Dies ist eine kompilierte Python-Datei. Python kompiliert Dateien in Python-Bytecode, damit die Dateien nicht jedes Mal beim Laden von Modulen geparst werden müssen. Wenn eine .pyc-Datei existiert, wird sie anstelle der .py-Datei geladen. Dieser Prozess ist für den Benutzer transparent.

Importieren von Modulobjekten in den aktuellen Namensraum

Ein Namensraum ist ein System, in dem jedes Objekt benannt wird und in Python darauf zugegriffen werden kann. Wir importieren die Funktion draw_game in den Namensraum des Hauptskripts, indem wir den from-Befehl verwenden.

Vielleicht haben Sie bemerkt, dass in diesem Beispiel der Modulname draw_game nicht vorangestellt ist, weil wir den Modulnamen mit dem import-Befehl angegeben haben.

Der Vorteil dieser Notation ist, dass man das Modul nicht immer wieder referenzieren muss. Ein Namensraum kann jedoch keine zwei Objekte mit demselben Namen haben, sodass der import-Befehl ein vorhandenes Objekt im Namensraum ersetzen könnte.

Importieren aller Objekte aus einem Modul

Sie können den import *-Befehl verwenden, um alle Objekte in einem Modul wie folgt zu importieren:

Dies könnte etwas riskant sein, da Änderungen im Modul das Modul beeinflussen können, das es importiert, aber es ist kürzer und erfordert nicht die Spezifikation jedes Objekts, das Sie aus dem Modul importieren möchten.

Benutzerdefinierter Importname

Module können unter jedem gewünschten Namen geladen werden. Dies ist nützlich, wenn ein Modul bedingt importiert wird, um im restlichen Code denselben Namen zu verwenden.

Zum Beispiel, wenn Sie zwei draw-Module mit leicht unterschiedlichen Namen haben, können Sie folgendes tun:

Modulinitialisierung

Das erste Mal, wenn ein Modul in ein laufendes Python-Skript geladen wird, wird es durch einmaliges Ausführen des Codes im Modul initialisiert. Wenn kein anderes Modul in Ihrem Code dasselbe Modul erneut importiert, wird es nicht ein weiteres Mal geladen, sodass lokale Variablen innerhalb des Moduls als "Singleton" fungieren, was bedeutet, dass sie nur einmal initialisiert werden.

Sie können dies dann verwenden, um Objekte zu initialisieren. Zum Beispiel:

Verlängern des Modul-Ladepfads

Es gibt einige Möglichkeiten, dem Python-Interpreter zu sagen, wo er nach Modulen suchen soll, abgesehen von dem lokalen Verzeichnis und den eingebauten Modulen. Sie können die Umgebungsvariable PYTHONPATH verwenden, um zusätzliche Verzeichnisse anzugeben, in denen nach Modulen gesucht werden soll:

Dies führt game.py aus und ermöglicht dem Skript, Module aus dem foo-Verzeichnis sowie dem lokalen Verzeichnis zu laden.

Sie können auch die Funktion sys.path.append verwenden. Führen Sie sie vor dem Ausführen des import-Befehls aus:

Jetzt wurde das foo-Verzeichnis zur Liste der Pfade hinzugefügt, in denen nach Modulen gesucht wird.

Erforschen von eingebauten Modulen

Die vollständige Liste der eingebauten Module in der Python-Standardbibliothek finden Sie hier.

Zwei sehr wichtige Funktionen sind bei der Erforschung von Modulen in Python hilfreich - die dir- und help-Funktionen.

Um das Modul urllib zu importieren, das es uns ermöglicht, Daten von URLs zu lesen, importieren wir das Modul:

Wir können nachschauen, welche Funktionen in jedem Modul implementiert sind, indem wir die dir-Funktion verwenden:

Wenn wir die Funktion im Modul finden, die wir verwenden möchten, können wir im Python-Interpreter mit der help-Funktion mehr darüber lesen:

Schreiben von Paketen

Pakete sind Namensräume, die mehrere Pakete und Module enthalten. Sie sind einfach Verzeichnisse, aber mit bestimmten Anforderungen.

Jedes Paket in Python ist ein Verzeichnis, das eine spezielle Datei namens __init__.py enthalten MUSS. Diese Datei, die leer sein kann, zeigt an, dass das Verzeichnis, in dem es sich befindet, ein Python-Paket ist. So kann es auf die gleiche Weise wie ein Modul importiert werden.

Wenn wir ein Verzeichnis namens foo erstellen, das den Paketnamen angibt, können wir dann ein Modul in diesem Paket namens bar erstellen. Dann fügen wir die Datei __init__.py in das foo-Verzeichnis ein.

Um das Modul bar zu verwenden, können wir es auf zwei Arten importieren:

Im ersten obigen Beispiel müssen wir das Präfix foo verwenden, wenn wir auf das Modul bar zugreifen. Im zweiten Beispiel müssen wir das nicht, da wir das Modul in den Namensraum unseres Moduls importiert haben.

Die Datei __init__.py kann auch entscheiden, welche Module das Paket als API exportiert, während andere Module intern bleiben, indem die Variable __all__ wie folgt überschrieben wird:

__init__.py:

__all__ = ["bar"]

Übung

In dieser Übung geben Sie eine alphabetisch sortierte Liste aller Funktionen im re-Modul aus, die das Wort find enthalten.

import re # Your code goes here find_members = [] import re # Your code goes here find_members = [] for member in dir(re): if "find" in member: find_members.append(member) print(sorted(find_members)) test_object('find_members') success_msg('Great work!')

This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join over a million other learners and get started learning Python for data science today!

Previous Tutorial Next Tutorial Take the Test
Copyright © learnpython.org. Read our Terms of Use and Privacy Policy