2.17. Tyyppivihjeet

Python sallii sinun annotoida funktion parametreja ja palautusarvoja tyyppitiedolla. Annotaatiot jätetään huomiotta ajon aikana – mikään ei tarkista niitä, mikään ei muunna niiden perusteella – mutta ne toimivat dokumentaationa lukijoille ja IDE:lle.

2.17.1. Annotaatiosyntaksi

Parametrin annotaatio tulee kaksoispisteen jälkeen. Palautustyyppi tulee ->-merkin jälkeen ja ennen rungon kaksoispistettä:

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)

Vihjeet kuvaavat, mitä pitäisi välittää sisään ja mitä tullaan palauttamaan. add("hi", "there")-kutsu ei nosta poikkeusta – Python suorittaa rungon joka tapauksessa. Vihjeet ovat sopimus, eivät tarkistus.

Parametrilla voi olla sekä oletusarvo että annotaatio:

def greet(name: str, greeting: str = "hello") -> None:
    print(greeting, name)

CPythonilla on rikkaampi merkintätapa (Optional, Union, geneeriset tyypit) typing-moduulin kautta, mutta ne ovat raskaita MicroPythonissa ja niitä tarvitaan harvoin arkisessa kamerakoodissa.

2.17.2. MicroPython ajon aikana

MicroPython jäsentää annotaatiot ja jättää ne sitten huomiotta. Kamerassa ei ole typing-moduulia tuotavaksi; Optional[int]- tai list[int]-merkinnän käyttäminen joko epäonnistuu tuonnissa tai käyttäytyy hiljaisesti tavallisena attribuuttihakuna, riippuen laiteohjelmistoversiosta.

Pitäydy tavallisissa tyyppinimissä (int, float, str, bool, bytes, list, tuple, dict) annotaatioissa. Ne eivät maksa mitään ajon aikana ja välittävät tarkoituksen selkeästi.

2.17.3. Miten IDE käyttää niitä

IDE lukee annotaatiot ohjatakseen työkaluvihjeitä, automaattista täydennystä ja sisäisiä vihjeitä. Funktio, joka on annotoitu -> int-merkinnällä, näyttää int-tyypin palautustyyppinään, kun kohdistin viedään kutsun päälle. Parametri, joka on annotoitu : str-merkinnällä, täydentää automaattisesti merkkijonomenetelmiä argumentille funktion rungon sisällä.

Tämä on käytännön hyöty annotaatioiden kirjoittamisesta ajoympäristössä, joka jättää ne huomiotta: parempi tuki editorilta ilman mitään kustannusta, kun skripti suoritetaan kamerassa.

2.17.4. Muuttuja-annotaatiot

Tavallisten sijoitusten annotaatiot toimivat samalla tavalla:

threshold: float = 0.5
name: str = "OpenMV"

Myös nämä jätetään huomiotta ajon aikana. Niiden pääkäyttö on tehdä aiottu tyyppi ilmeiseksi, kun oikea puoli ei tee siitä ilmeistä – tyypillisesti kun alkuarvo on paikanvaraaja, joka korvataan myöhemmin.