Przejdź do głównej treści
eLearner.app
Moduł 9 · Lekcja 1 z 433/36 w kursie~12 min
Lekcje modułu (1/4)

Type hints: adnotacje typów

Podpowiedzi typów lub type hints (anotacje typów) to opcjonalne deklaracje, które mówią: „ta zmienna/parametr ma typ X”. Python NIE weryfikuje ich w czasie wykonywania kodu: są one przeznaczone dla Ciebie, Twojego edytora (autouzupełnianie!) oraz narzędzi takich jak mypy lub pyright, które wykonują statyczną analizę typów.

Anotowanie zmiennych

Python
nome: str = "Ada"
anni: int = 36
attivo: bool = True
prezzi: list[float] = [1.2, 3.4]

Składnia to nazwa: typ = wartosc. Bez wartości jest to czysta deklaracja:

Python
risultato: int  # nessuna assegnazione, solo "annuncio del tipo"

Anotowanie funkcji

Python
def saluta(nome: str, urlante: bool = False) -> str:
    s = f"Ciao {nome}"
    return s.upper() if urlante else s

def somma(numeri: list[int]) -> int:
    return sum(numeri)

Składnia: param: typ dla każdego parametru, -> typ dla zwracanej wartości. Funkcja, która nic nie zwraca, używa -> None.

Wbudowane typy generyczne (Python 3.9+)

Python
nomi: list[str] = ["a", "b"]
mappa: dict[str, int] = {"x": 1}
coppia: tuple[int, str] = (1, "ok")
unici: set[int] = {1, 2, 3}

Optional i Union

Wartość, która może wynosić None:

Python
def trova_utente(id: int) -> str | None:
    if id == 1:
        return "Ada"
    return None

X | None to nowoczesna składnia (Python 3.10+). Odpowiednik: Optional[X] z modułu typing. Dla unii wielu typów: int | str | float.

typing: przydatne narzędzia

Python
from typing import Any, Callable

def applica(f: Callable[[int], int], x: int) -> int:
    return f(x)

valore: Any = "qualunque cosa"  # disabilita il check
  • Any = „nie sprawdzaj” (używaj oszczędnie).
  • Callable[[arg1, arg2], return] = funkcja przyjmująca podane parametry i zwracająca dany typ.

mypy: parser typów

Instalujesz mypy, uruchamiasz mypy plik.py i informuje Cię, czy typy się zgadzają:

Bash
$ mypy script.py
script.py:5: error: Argument 1 to "somma" has incompatible type "str"; expected "int"

Sprawdzanie typów za pomocą mypy

Anotacje typów w Pythonie nie są egzekwowane w czasie wykonywania przez interpreter; są ignorowane podczas wykonywania programu. Aby zweryfikować poprawność typów, musisz uruchomić zewnętrzne narzędzie do analizy statycznej, takie jak mypy, wpisując w terminalu polecenie mypy script.py.

Spróbuj sam

Ćwiczenie#python.m9.l1.e1
Próby: 0Ładowanie...

Zdefiniuj funkcję `double(numbers: list[int]) -> list[int]`, która zwraca listę z każdym elementem pomnożonym przez 2. Wywołaj ją z argumentem [1, 2, 3] i przypisz wynik do `r`. Oceń `r`.

Ładowanie edytora...
Pokaż wskazówkę

Użyj wyrażenia listotwórczego (list comprehension) lub pętli for.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

Ćwiczenie#python.m9.l1.e2
Próby: 0Ładowanie...

Zdefiniuj funkcję `first_or_none(items: list[int]) -> int | None`, która zwraca pierwszy element, jeśli lista nie jest pusta, w przeciwnym razie None. Przypisz `a = first_or_none([10, 20])` oraz `b = first_or_none([])`. Oceń `(a, b)`.

Ładowanie edytora...
Pokaż wskazówkę

Warunek `if items` jest prawdziwy, gdy lista NIE jest pusta.

Rozwiązanie dostępne po 3 próbach

Dodatkowe wyzwanie

Ćwiczenie#python.m9.l1.e3
Próby: 0Ładowanie...

Napisz funkcję `double_value(n: int) -> int` która przyjmuje liczbę całkowitą, mnoży ją przez 2 i zwraca wynik. Upewnić się, że określasz podpowiedzi typów zarówno dla parametru, jak i dla zwracanej wartości. Na koniec oceń `double_value(5)`.

Ładowanie edytora...
Pokaż wskazówkę

Użyj n: int jako parametru oraz -> int po sygnaturze funkcji.

Rozwiązanie dostępne po 3 próbach