A kódsorok fölé vagy mellé írt kommenteken, valamint a dokumentációs karakterláncon (docstring) felül a forráskód értelmezését a Pythonban annotációkkal (annotation) is segíthetjük, amelyek lényegben a kód bizonyos helyein alkalmazható tájékoztató címkék.
Annotációval láthatjuk el a függvények argumentumait és a visszatérési értékét, valamint a változókat és az objektumok attribútumait. Ezen kódhelyeken annotációval legtöbbször típusneveket adunk meg. Ez azért hasznos, mert a Python dinamikus típuskezelésű programnyelv, ami azt jelenti, hogy a változók típusukat csak az értékadás után, az értékük típusával megegyezően veszik fel, ezért egy függvény definíciójában a fejlécből még nem tudjuk meg, hogy milyen típusú argumentumokat várnak a felsorolt paraméterek, és arra sem utal semmi, hogy a visszatérési érték milyen típusú. A típusnevet jelölő annotációt típusutalásnak (type hint) nevezik.
A típusutalásokkal nem csak könnyebben értelmezhető kódot kapunk, hanem arra is lehetőség nyílik, hogy a fejlettebb forráskódszerkesztők, fejlesztőkörnyezetek és speciális alkalmazások (statikus típusellenőrzők) bizonyos vizsgálatokat végezzenek, és ennek alapján olyan szolgáltatásokat nyújtsanak, amelyek megkönnyítik, és szemantikailag biztonságosabbá teszik a forráskód megírását (pl. típuskonzisztencia vizsgálata, automatikus kódkiegészítés, és javaslat a típushoz alkalmazható utasításokra).
Bár az annotációk alkalmazásának zöme típusutalás, de valójában az annotáció bármilyen érvényes kifejezés lehet. Nem annyira köztudott, hogy a függvény fejlécében szereplő annotációkban foglal adatokat futás közben a programunk is fel tudja dolgozni. Ehhez a függvény __annotations__ speciális attribútumával hivatkozott szótárt kell használni, ahol a kulcsok a paraméternevek, az ezekhez tartozó objektumok pedig az annotációkban szereplő kifejezések értéke.
Ennek szemléltetésére az alábbi függvényt definiáltuk. Itt a kommenteken és a docstringen felül láthatjuk a paraméterek és visszatérési érték annotációit. A függvény második paraméréhez nem egy egyszerű típusutalást írtunk, hanem egy szótárt eredményező kifejezést, amelyben meghatároztuk az argumentumként felvehető legkisebb és legnagyobb értéket. A függvény törzsén belül ezt felhasználva végzünk ellenőrzést.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
def szövegtöbbszöröző(szöveg:str, n:{'típus':int, 'tartomány':[1,3]}=1) -> str: """A megadott szöveg n-szer egymás után fűzött változatával tér vissza.""" alsó, felső = szövegtöbbszöröző.__annotations__['n']['tartomány'] if not alsó <= n <= felső: raise ValueError(f'A szorzó értéke az {alsó}..{felső} tartományon kívül van.') return szöveg*n #TESZT print(szövegtöbbszöröző('ab/')) # Eredmény: ab/ print(szövegtöbbszöröző('ab/',3)) # Eredmény: ab/ab/ab/ print(szövegtöbbszöröző('ab/',4)) # Eredmény: ValueError: A szorzó értéke az 1..3 tartományon kívül van. |
Az annotációkról és azok feldolgozásáról további részleteket és példákat a Python tudásépítés lépésről lépésre című könyv „No comment! Vagy mégis? – a forráskódértelmezhetőségét növelő kiegészítő információk” és a „Speciális metódus és adat attribútumok” fejezetek tartalmaznak.