Oznake tipova čine očekivanja vidljivim.
Kada čitaš funkciju bez oznaka, nije uvek jasno koje vrednosti očekuje ili vraća.
def izracunaj_cenu(cena, popust):
return cena - cena * popust / 100
def izracunaj_cenu(cena: float, popust: float) -> float:
return cena - cena * popust / 100Algoritam se nije promenio. float opisuje očekivane parametre, a -> float očekivanu povratnu vrednost.
Uobičajene osnovne oznake su int za cele brojeve, float za decimalne brojeve, str za tekst i bool za True ili False.
Važno: Python ne sprovodi oznake tipova tokom uobičajenog izvršavanja. Anotacija je korisna informacija, a ne automatska runtime validacija.
def napravi_pozdrav(ime: str) -> str:
return f"Zdravo, {ime}!"
def prikazi_poruku(poruka: str) -> None:
print(poruka)
ime: str = "Ana"
godine: int = 20
ocene: list[int] = [8, 9, 10]
cene: dict[str, float] = {"Hleb": 85.0}Oznaka parametra opisuje ulaz. Oznaka iza -> opisuje rezultat. None znači da funkcija izvršava radnju, ali ne vraća korisnu vrednost. Oznake kolekcija opisuju vrednosti unutar liste ili rečnika.
def pronadji_korisnika(korisnik_id: int) -> str | None:
...
vrednost: int | float = 12.5str | None znači da rezultat može biti tekst ili da rezultata nema. int | float prihvata bilo koju od te dve vrste brojeva. Sintaksa unije | zahteva Python 3.10 ili noviji.
class Proizvod:
def __init__(self, naziv: str, cena: float) -> None:
self.naziv = naziv
self.cena = cena
def prikazi(self) -> str:
return f"{self.naziv}: {self.cena} RSD"Ovaj primer povezuje oznake tipova sa OOP-om. U ovom jednostavnom primeru, self ne mora imati sopstvenu eksplicitnu oznaku.
Šta oznake tipova ne rade
- Ne odbijaju svaku pogrešnu vrednostFunkcija i dalje može primiti vrednost pogrešnog tipa. Stvarna greška može nastati kasnije, kada Python izvrši nekompatibilnu operaciju.
- Ne pretvaraju vrednostiOznaka
strne pretvara automatski broj u tekst, a oznakaintne pretvara tekst u broj. - Ne zamenjuju testiranje ni razmišljanjeIspravne oznake ne mogu sprečiti logičke greške. VS Code, Pylance ili alati za statičku analizu mogu upozoriti na moguća neusklađivanja, u zavisnosti od podešavanja, ali to nije runtime validacija.
Pre nego što zatražiš pomoć od Slobyja
- Očekivani tip nije garancijaZapitaj se šta Python zaista radi sa prosleđenom vrednošću tokom izvršavanja.
- Povratni tip nije jasanPogledaj svaki put povratka, zatim odluči da li funkcija vraća vrednost ili None.
