2.17. Typtips¶
Python låter dig annotera funktionsparametrar och returvärden med typinformation. Annoteringarna ignoreras vid körning – inget kontrollerar dem, inget konverterar baserat på dem – men de fungerar som dokumentation för läsare och för IDE:n.
2.17.1. Annoteringssyntax¶
En parameterannotering placeras efter ett kolon. Returtypen placeras efter -> och före kroppens kolon:
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)
Tipsen beskriver vad som bör skickas in och vad som kommer att returneras. Att anropa add("hi", "there") höjer inget fel – Python kör kroppen ändå. Tipsen är ett kontrakt, inte en kontroll.
En parameter kan ha både ett standardvärde och en annotering:
def greet(name: str, greeting: str = "hello") -> None:
print(greeting, name)
CPython har rikare notation (Optional, Union, generics) genom modulen typing, men dessa är tunga på MicroPython och behövs sällan för vardaglig kamerakod.
2.17.2. MicroPython vid körning¶
MicroPython tolkar annoteringar och ignorerar dem sedan. Det finns ingen typing-modul att importera från på kameran; att försöka använda Optional[int] eller list[int] kommer antingen att misslyckas med importen eller tyst bete sig som vanlig attributåtkomst, beroende på firmware-bygget.
Håll dig till enkla typnamn (int, float, str, bool, bytes, list, tuple, dict) i annoteringar. De kostar inget vid körning och förmedlar avsikten tydligt.
2.17.3. Hur IDE:n använder dem¶
IDE:n läser annoteringar för att driva verktygstips, autokomplettering och inbyggda tips. En funktion som annoteras med -> int visar int som sin returtyp när markören hålls över anropet. En parameter som annoteras med : str autokompletterar strängmetoder på argumentet inuti funktionskroppen.
Detta är den praktiska utdelningen av att skriva annoteringar på en körmiljö som ignorerar dem: bättre stöd från editorn utan någon kostnad alls när skriptet körs på kameran.
2.17.4. Variabelannoteringar¶
Annoteringar på vanliga tilldelningar fungerar på samma sätt:
threshold: float = 0.5
name: str = "OpenMV"
Dessa ignoreras också vid körning. Deras huvudsakliga användning är att göra den avsedda typen tydlig när högersidan inte gör den tydlig – vanligtvis när det inledande värdet är en platshållare som kommer att ersättas senare.