Code mit import wiederverwenden
Ein Modul ist eine Python-Datei, deren Namen (Funktionen, Konstanten, Klassen) anderer Code nutzen kann. import math lädt das Modul math aus der Standardbibliothek und macht es unter diesem Namen verfügbar: Dann schreiben Sie math.sqrt(2). Python wird mit Hunderten von Modulen ausgeliefert, und alles, was Sie später installieren (etwa numpy), wird genauso importiert. Setzen Sie Importe an den Anfang der Datei, damit man sofort sieht, wovon sie abhängt.
import math
import statistics
# Use a name from a module with module.name
print(math.sqrt(252)) # 15.874507866387544
print(round(math.sqrt(252), 2)) # 15.87
returns = [0.01, -0.02, 0.015, 0.0]
print(round(statistics.stdev(returns), 4)) # 0.0155from ... import und Aliase
from datetime import date bringt nur einen Namen herein, sodass Sie date(2025, 1, 2) ohne Präfix schreiben. import numpy as np gibt einem Modul einen kürzeren Alias, eine Konvention, die Sie überall sehen. Vermeiden Sie from module import *: Es kippt unbekannte Namen in Ihre Datei und kann Ihre eigenen stillschweigend ersetzen. Bevorzugen Sie klare Namen und nutzen Sie das Präfix, wenn es die Herkunft offensichtlich macht.
from datetime import date
from math import sqrt as square_root
import statistics as stats
# Only the names you asked for are imported
start = date(2025, 1, 2)
end = date(2025, 3, 3)
print((end - start).days) # 60
print(square_root(16)) # 4.0
print(stats.mean([1.0, 2.0, 3.0])) # 2.0Ihre eigenen Module
Jede .py-Datei ist ein Modul. Liegt fees.py neben main.py und definiert commission, kann main.py import fees schreiben und fees.commission(...) aufrufen. Wird eine Datei direkt ausgeführt, setzt Python ihr __name__ auf "__main__"; wird sie importiert, ist __name__ der Modulname. Der Wächter if __name__ == "__main__": lässt Code daher nur laufen, wenn die Datei ausgeführt wird, nicht beim Import, und hält Demos und Tests aus dem Weg.
# fees.py
RATE = 0.001
def commission(notional):
return notional * RATE
if __name__ == "__main__":
print(commission(10000)) # runs only with: python fees.py
# main.py (next to fees.py)
import fees
print(fees.commission(50000)) # 50.0
print(__name__) # __main__Wo Python sucht, und eine klassische Falle
Bei import name sucht Python zuerst im Ordner des laufenden Skripts, dann in der Standardbibliothek und den installierten Paketen (die Liste ist sys.path). Der erste Treffer gewinnt. Deshalb verdeckt eine eigene Datei namens random.py oder statistics.py das echte Modul, und import random lädt dann Ihre Datei und scheitert auf verwirrende Weise. Benennen Sie Ihre Dateien nie wie Module der Standardbibliothek. Vermeiden Sie auch zwei Module, die sich oben gegenseitig importieren (zirkulärer Import); verschieben Sie das Gemeinsame in ein drittes Modul.
import sys
import random
# Imported modules are remembered in sys.modules; sys.path is the search list
print("random" in sys.modules) # True
print(random.__name__) # random
print(len(sys.path) > 0) # True
# A quick tour of useful standard-library modules
import collections, datetime, itertools, pathlib
print(collections.Counter("AAPL")["A"]) # 2
print(datetime.date(2025, 1, 2).weekday()) # 3 (Thursday; Monday is 0)datetime, statistics, csv, json, collections, itertools, pathlib). Getesteter Bibliothekscode ist fast immer sicherer als eine schnelle Eigenbau-Version, und das Lab wertet das manuelle Zerlegen von Datumsangaben als Technikfehler.import module, dannmodule.name;from module import namefür einen Namen;import module as shortfür einen Alias.- Importe stehen oben; vermeiden Sie
import *. - Benennen Sie Dateien nicht wie Standardmodule; nutzen Sie
if __name__ == "__main__":für Code, der nur direkt laufen soll.
Als Nächstes: Pakete und Projektstruktur, wie Sie mehrere Module in Ordnern organisieren, die sauber importierbar sind.
Lab: Was bewertet wird
- Mit
daily_voldie Volatilität messen25 Pkt. - Mit
annualize_voldie Volatilität auf ein Jahr hochrechnen25 Pkt. - Mit
days_betweendie Tage zwischen zwei Daten zählen25 Pkt. - Mit
is_business_dayWerktage von Wochenenden unterscheiden25 Pkt.