Bibliotheken
Zuletzt aktualisiert am 2025-10-30 | Diese Seite bearbeiten
Geschätzte Zeit: 20 Minuten
Übersicht
Fragen
- Wie kann ich Software benutzen, die andere Leute geschrieben haben?
- Wie kann ich herausfinden, was diese Software macht?
Ziele
- Erklären, was Softwarebibliotheken sind und warum Programmierer sie erstellen und benutzen.
- Schreibe Programme, die Module aus der Python-Standardbibliothek importieren und verwenden.
- Suchen und lesen Sie die Dokumentation der Standardbibliothek interaktiv (im Interpreter) und online.
Der größte Teil der Macht einer Programmiersprache liegt in ihren Bibliotheken.
- Eine Bibliothek ist eine Sammlung von Dateien
(Module genannt), die Funktionen zur Verwendung durch andere
Programme enthält.
- Kann auch Datenwerte (z.B. numerische Konstanten) und andere Dinge enthalten.
- Der Inhalt einer Bibliothek sollte zusammengehören, aber es gibt keine Möglichkeit, das zu erzwingen.
- Die Python-Standardbibliothek ist eine umfangreiche Sammlung von Modulen, die mit Python selbst geliefert wird.
- Viele zusätzliche Bibliotheken sind über PyPI (den Python Package Index) erhältlich.
- Wir werden später sehen, wie man neue Bibliotheken schreibt.
Bibliotheken und Module
Eine Bibliothek ist eine Sammlung von Modulen, aber die Begriffe werden oft austauschbar verwendet, vor allem, da viele Bibliotheken nur aus einem einzigen Modul bestehen, also mach dir keine Sorgen, wenn du sie vermischt.
Ein Programm muss ein Bibliotheksmodul importieren, bevor es es verwenden kann.
- Benutze
import, um ein Bibliotheksmodul in den Speicher eines Programms zu laden. - Dann verweise auf Dinge aus dem Modul als
module_name.thing_name.- Python verwendet
.als Bezeichnung für “Teil von”.
- Python verwendet
- Verwendung von
math, einem der Module der Standardbibliothek:
AUSGABE
pi is 3.141592653589793
cos(pi) is -1.0
- Auf jedes Element muss mit dem Namen des Moduls verwiesen werden.
-
math.cos(pi)wird nicht funktionieren: der Verweis aufpi“erbt” nicht irgendwie den Verweis der Funktion aufmath.
-
Benutzen Sie help, um etwas über den Inhalt eines
Bibliotheksmoduls zu erfahren.
- Funktioniert genau wie die Hilfe für eine Funktion.
AUSGABE
Help on module math:
NAME
math
MODULE REFERENCE
http://docs.python.org/3/library/math
The following documentation is automatically generated from the Python
source files. It may be incomplete, incorrect or include features that
are considered implementation detail and may vary between Python
implementations. When in doubt, consult the module reference at the
location listed above.
DESCRIPTION
This module is always available. It provides access to the
mathematical functions defined by the C standard.
FUNCTIONS
acos(x, /)
Return the arc cosine (measured in radians) of x.
⋮ ⋮ ⋮
Importieren Sie bestimmte Elemente aus einem Bibliotheksmodul, um Programme zu verkürzen.
- Verwenden Sie
from ... import ..., um nur bestimmte Elemente aus einem Bibliotheksmodul zu laden. - Dann verweisen Sie direkt auf sie ohne den Bibliotheksnamen als Präfix.
AUSGABE
cos(pi) is -1.0
Erstellen Sie einen Alias für ein Bibliotheksmodul, wenn Sie es importieren, um Programme zu verkürzen.
- Benutzen Sie
import ... as ..., um einer Bibliothek einen kurzen Alias zu geben, während Sie sie importieren. - Dann verweisen Sie auf Elemente in der Bibliothek mit diesem verkürzten Namen.
AUSGABE
cos(pi) is -1.0
- Wird häufig für Bibliotheken verwendet, die häufig benutzt werden
oder lange Namen haben.
- z.B. wird die
matplotlibPlot-Bibliothek oft alsmplaliasiert.
- z.B. wird die
- Dies kann jedoch dazu führen, dass Programme schwerer zu verstehen sind, da die Leser die Aliasnamen Ihres Programms lernen müssen.
Inspizieren des Math-Moduls
- Welche Funktion aus dem Modul
mathkönnen Sie verwenden, um eine Quadratwurzel ohne Verwendung vonsqrtzu berechnen? - Da die Bibliothek diese Funktion enthält, warum existiert
sqrt?
Mit
help(math)sehen wir, dass wirpow(x,y)zusätzlich zusqrt(x)haben, also könnten wirpow(x, 0.5)benutzen, um eine Quadratwurzel zu finden.Die Funktion
sqrt(x)ist bei der Implementierung von Gleichungen wohl lesbarer alspow(x, 0.5). Lesbarkeit ist ein Eckpfeiler guter Programmierung, daher ist es sinnvoll, eine spezielle Funktion für diesen speziellen Fall bereitzustellen.
Auch das Design der Python-Bibliothek math hat seinen
Ursprung im C-Standard, der sowohl sqrt(x) als auch
pow(x,y) enthält, also zeigt sich ein wenig von der
Geschichte des Programmierens in Pythons Funktionsnamen.
Auffinden des richtigen Moduls
Sie wollen ein zufälliges Zeichen aus einer Zeichenkette auswählen:
- Welches Standardbibliothek-Modul könnte Ihnen helfen?
- Welche Funktion würden Sie aus diesem Modul auswählen? Gibt es Alternativen?
- Versuche, ein Programm zu schreiben, das die Funktion verwendet.
Das Zufallsmodul scheint zu helfen.
Die Zeichenkette besteht aus 11 Zeichen, die jeweils einen
Positionsindex von 0 bis 10 haben. Sie könnten die Funktionen
random.randrange(https://docs.python.org/3/library/random.html#random.randrange)
oder random.randint(https://docs.python.org/3/library/random.html#random.randint)
verwenden, um eine zufällige ganze Zahl zwischen 0 und 10 zu erhalten,
und dann das Zeichenbasesan diesem Index auswählen:
oder noch kompakter:
Vielleicht haben Sie die Funktion random.sample
gefunden? Sie ermöglicht etwas weniger Tipparbeit, ist aber vielleicht
etwas schwerer zu verstehen, wenn man nur liest:
Beachten Sie, dass diese Funktion eine Liste von Werten zurückgibt. Wir werden in Folge 11 etwas über Listen lernen.
Die einfachste und kürzeste Lösung ist die Funktion random.choice,
die genau das tut, was wir wollen:
Jigsaw Puzzle (Parsons’s Problem) Programmierbeispiel
Ordnen Sie die folgenden Anweisungen so an, dass eine zufällige DNA-Base und ihr Index in der Zeichenkette ausgegeben wird. Es werden nicht alle Anweisungen benötigt. Sie können auch Zwischenvariablen verwenden/hinzufügen.
Wann ist die Hilfe verfügbar?
Wenn ein Kollege von Ihnen help(math) tippt, meldet
Python einen Fehler:
FEHLER
NameError: name 'math' is not defined
Was hat Ihr Kollege vergessen zu tun?
Importieren des Mathe-Moduls (import math)
kann geschrieben werden als
Da Sie den Code gerade erst geschrieben haben und mit ihm vertraut sind, finden Sie die erste Version vielleicht sogar einfacher zu lesen. Wenn Sie jedoch versuchen, einen umfangreichen Code zu lesen, der von jemand anderem geschrieben wurde, oder wenn Sie nach mehreren Monaten zu Ihrem eigenen umfangreichen Code zurückkehren, sind nicht abgekürzte Namen oft einfacher, es sei denn, es gibt klare Abkürzungskonventionen.
Es gibt viele Möglichkeiten, Bibliotheken zu importieren!
Ordnen Sie die folgenden Druckanweisungen den entsprechenden Bibliotheksaufrufen zu.
Druckbefehle:
print("sin(pi/2) =", sin(pi/2))print("sin(pi/2) =", m.sin(m.pi/2))print("sin(pi/2) =", math.sin(math.pi/2))
Bibliotheksaufrufe:
from math import sin, piimport mathimport math as mfrom math import *
- Bibliotheksaufrufe 1 und 4. Um direkt auf
sinundpiohne den Bibliotheksnamen als Präfix zu verweisen, müssen Sie die Anweisungfrom ... import ...verwenden. Während Bibliotheksaufruf 1 speziell die beiden Funktionensinundpiimportiert, importiert Bibliotheksaufruf 4 alle Funktionen im Modulmath. - Bibliotheksaufruf 3. Hier werden
sinundpimit einem verkürzten Bibliotheksnamenmanstelle vonmathangesprochen. Bibliotheksaufruf 3 macht genau das mit der Syntaximport ... as ...- er erzeugt einen Alias fürmathin Form des verkürzten Namensm. - Bibliotheksaufruf 2. Hier wird auf
sinundpimit dem regulären Bibliotheksnamenmathverwiesen, so dass der reguläre Aufrufimport ...ausreicht.
Hinweis: Obwohl der Bibliotheksaufruf 4
funktioniert, ist es nicht
empfohlen, alle Namen aus einem Modul mit einem Platzhalterimport zu
importieren, da es dadurch unklar wird, welche Namen aus dem Modul im
Code verwendet werden. Im Allgemeinen ist es am besten, Ihre Importe so
spezifisch wie möglich zu gestalten und nur das zu importieren, was Ihr
Code verwendet. In Bibliotheksaufruf 1 sagt uns die Anweisung
import explizit, dass die Funktion sin aus dem
Modul math importiert wird, aber Bibliotheksaufruf 4
vermittelt diese Information nicht.
Importieren bestimmter Elemente
Wahrscheinlich finden Sie diese Version einfacher zu lesen, da sie
weniger dicht ist. Der Hauptgrund, diese Form des Imports nicht zu
verwenden, ist die Vermeidung von Namenskonflikten. Sie würden zum
Beispiel degrees nicht auf diese Weise importieren, wenn
Sie auch den Namen degrees für eine eigene Variable oder
Funktion verwenden wollten. Oder wenn Sie auch eine Funktion mit dem
Namen degrees aus einer anderen Bibliothek importieren
würden.
AUSGABE
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-1-d72e1d780bab> in <module>
1 from math import log
----> 2 log(0)
ValueError: math domain error
- Der Logarithmus von
xist nur fürx > 0definiert, also liegt 0 außerhalb des Bereichs der Funktion. - Sie erhalten einen Fehler vom Typ
ValueError, der anzeigt, dass die Funktion einen unpassenden Argumentwert erhalten hat. Die zusätzliche Meldung “math domain error” macht deutlicher, wo das Problem liegt.
- Der größte Teil der Macht einer Programmiersprache liegt in ihren Bibliotheken.
- Ein Programm muss ein Bibliotheksmodul importieren, um es verwenden zu können.
- Verwenden Sie
help, um mehr über den Inhalt eines Bibliotheksmoduls zu erfahren. - Importieren Sie bestimmte Elemente aus einer Bibliothek, um Programme zu verkürzen.
- Erstellen Sie einen Alias für eine Bibliothek, wenn Sie diese importieren, um Programme zu verkürzen.