2.17. Typ-Hinweise¶
Python erlaubt es Ihnen, Funktionsparameter und Rückgabewerte mit Typinformationen zu annotieren. Die Annotationen werden zur Laufzeit ignoriert – nichts überprüft sie, nichts konvertiert auf ihrer Grundlage – aber sie dienen als Dokumentation für Leser und für die IDE.
2.17.1. Annotationssyntax¶
Eine Parameterannotation steht nach einem Doppelpunkt. Der Rückgabetyp steht nach -> und vor dem Doppelpunkt des Rumpfes:
def greet(name: str) -> None:
print("hello,", name)
def add(a: int, b: int) -> int:
return a + b
def average(values: list) -> float:
return sum(values) / len(values)
Die Hinweise beschreiben, was übergeben werden sollte und was zurückgegeben wird. Der Aufruf add("hi", "there") löst keinen Fehler aus – Python führt den Rumpf trotzdem aus. Die Hinweise sind ein Vertrag, keine Prüfung.
Ein Parameter kann sowohl einen Standardwert als auch eine Annotation haben:
def greet(name: str, greeting: str = "hello") -> None:
print(greeting, name)
CPython verfügt über eine reichhaltigere Notation (Optional, Union, Generics) über das Modul typing, aber diese sind auf MicroPython schwergewichtig und für alltäglichen Kameracode selten erforderlich.
2.17.2. MicroPython zur Laufzeit¶
MicroPython parst Annotationen und ignoriert sie dann. Auf der Kamera gibt es kein typing-Modul zum Importieren; der Versuch, Optional[int] oder list[int] zu verwenden, schlägt je nach Firmware-Build entweder beim Importieren fehl oder verhält sich stillschweigend wie ein einfacher Attributzugriff.
Bleiben Sie bei einfachen Typnamen (int, float, str, bool, bytes, list, tuple, dict) in Annotationen. Sie kosten zur Laufzeit nichts und vermitteln die Absicht klar.
2.17.3. Wie die IDE sie verwendet¶
Die IDE liest Annotationen, um Tooltips, Autovervollständigung und Inline-Hinweise zu steuern. Eine mit -> int annotierte Funktion zeigt int als ihren Rückgabetyp, wenn der Cursor über dem Aufruf schwebt. Ein mit : str annotierter Parameter vervollständigt String-Methoden des Arguments innerhalb des Funktionsrumpfes automatisch.
Dies ist der praktische Nutzen des Schreibens von Annotationen auf einer Laufzeitumgebung, die sie ignoriert: bessere Unterstützung durch den Editor ohne jegliche Kosten, wenn das Skript auf der Kamera läuft.
2.17.4. Variablenannotationen¶
Annotationen bei einfachen Zuweisungen funktionieren auf dieselbe Weise:
threshold: float = 0.5
name: str = "OpenMV"
Auch diese werden zur Laufzeit ignoriert. Ihre Hauptverwendung besteht darin, den beabsichtigten Typ deutlich zu machen, wenn die rechte Seite ihn nicht offensichtlich macht – typischerweise, wenn der Anfangswert ein Platzhalter ist, der später ersetzt wird.