In zahlreichen anderen Programmiersprachen (z.B. C++ oder Java) ist es erforderlich, den Datentyp explizit anzugeben (z.B. str
, int
, float
). Dies wird als statische Typisierung (static typing) bezeichnet. In Python verhält es sich anders. Die Angabe eines Datentyps ist nicht erforderlich, weshalb folgende Zuweisung eines Werts vom Typ int
funktioniert:
age = 32
Mit type()
lässt sich herausfinden, um welchen Datentyp es sich handelt:
print(type(age))
<class 'int'>
Dies wird als dynamische Typisierung bezeichnet (dynamic typing). Es erleichtert die Programmierung, fördert aber die Fehleranfälligkeit. Und häufig tritt ein Fehler, der auf einen falschen Datentyp zurückzuführen ist, erst zur Laufzeit des Programms in Erscheinung. Seit Python 3.6 ist es deswegen möglich, optional den Datentyp explizit anzugeben. Um beim obigen Beispiel zu bleiben, würde dies bei der Variablenzuweisung wie folgt aussehen:
age: int = 32
Und beim String-Datentyp wie folgt:
name: str = "Alexandra"
Dementsprechend sieht bei einer Funktion die Parameterliste so aus:
def greetings(name: str, age: int):
print(f"My name is {name} and I'm {age} years old.")
Sofern eine Funktion einen Rückgabewert hat, wird dies mit ->
gekennzeichnet:
def multiply(x: int, y: int) -> int:
return x * y
Nichtsdestotrotz würde der Aufruf dieser Funktion mit der Übergabe eines Arguments vom Typ float
unbeanstandet funktionieren:
def multiply(x: int, y: int) -> int:
return x * y
rval = multiply(2.4, 10)
print(rval) # 24.0
An dieser Stelle kommen Type-Checker ins Spiel, wobei mypy wohl am weitesten verbreitet sein dürfte. Installiert wird er mit
$ pip install mypy # Windows
$ pip3 install mypy # Linux, macOS
Wird mypy
zusammen mit der zu prüfenden Datei aufgerufen, würde dies in diesem Fall zu folgender Fehlermeldung führen:
type_hints.py:17: error: Argument 1 to "multiply" has incompatible type "float"; expected "int"
Found 1 error in 1 file (checked 1 source file)
Falls bei Euch als Entwicklungsumgebung PyCharm zum Einsatz kommt, findet die integrierte Typprüfung bereits während des Schreibens des Codes statt.
Auch wenn eine statische Typisierung Vorteile bietet, ist es nicht erforderlich, in jeder Anwendung stets explizit den Datentyp anzugeben. Gerade in kleineren Programmen mag man damit über das Ziel hinausschießen. Spätestens bei Projekten mit mehreren tausend Zeilen Code, ist die statische Typisierung aber äußerst hilfreich.
Für Visual Studio Code steht übrigens eine Erweiterung für die Verwendung von mypy
zur Verfügung: die Mypy extension for Visual Studio Code. Sobald diese Erweiterung installiert wurde, wird mypy
automatisch ausgeführt.
Weiterführende Links
Zuletzt aktualisiert am 21. Dezember 2023