Модульні уроки (1/4)
Типові підказки: типи анотацій
Підказки типу (анотації типу) — це додаткові оголошення, які говорять "ця змінна/параметр має тип X". Python НЕ перевіряє їх під час виконання: вони призначені для вас, вашого редактора (автозаповнення!) і таких інструментів, як mypy або pyright, які виконують статичну перевірку типу.
Анотування змінних
nome: str = "Ada"
anni: int = 36
attivo: bool = True
prezzi: list[float] = [1.2, 3.4]Синтаксис: name: type = value. Без значення це чиста декларація:
risultato: int # nessuna assegnazione, solo "annuncio del tipo"Функції анотування
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)Синтаксис: param: type для кожного параметра, -> type для повернення.
Функція, яка нічого не повертає, використовує -> None.
Вбудовані загальні типи (Python 3.9+)
nomi: list[str] = ["a", "b"]
mappa: dict[str, int] = {"x": 1}
coppia: tuple[int, str] = (1, "ok")
unici: set[int] = {1, 2, 3}Факультативний і союзний
Значення, яке може бути None:
def trova_utente(id: int) -> str | None:
if id == 1:
return "Ada"
return NoneX | None — це сучасний синтаксис (Python 3.10+). Еквівалент: Optional[X] від typing.
Для об’єднань кількох типів: int | str | float.
набір тексту: корисні інструменти
from typing import Any, Callable
def applica(f: Callable[[int], int], x: int) -> int:
return f(x)
valore: Any = "qualunque cosa" # disabilita il checkAny= "не перевіряти" (використовуйте економно).Callable[[arg1, arg2], return]= функція, яка приймає ці параметри та повертає цей тип.
mypy: перевірка типів
Ви встановлюєте mypy, запускаєте mypy file.py, і він повідомляє вам, чи збігаються типи:
$ mypy script.py
script.py:5: error: Argument 1 to "somma" has incompatible type "str"; expected "int"Перевірка типів за допомогою mypy
Підказки типу Python не застосовуються під час виконання інтерпретатором; вони ігноруються під час виконання. Щоб перевірити правильність типу, ви повинні запустити зовнішній інструмент статичного аналізу, наприклад mypy, виконавши команду mypy script.py у своєму терміналі.
Спробуйте самі
Визначте функцію `double(numbers: list[int]) -> list[int]`, яка повертає список із кожним елементом, помноженим на 2. Викличте її за допомогою [1, 2, 3] і призначте `r`. Оцініть `r`.
Показати підказку
Використовуйте розуміння списку або цикл for.
Рішення доступне після 3 спроб
Повторна вправа
Визначте `first_or_none(items: list[int]) -> int | None` повертає перший елемент, якщо список непорожній, інакше None. Призначте `a = first_or_none([10, 20])` і `b = first_or_none([])`. Оцініть `(a, b)`.
Показати підказку
`if items` має значення true, якщо список НЕ порожній.
Рішення доступне після 3 спроб
Додатковий виклик
Write a function `double_value(n: int) -> int` that takes an integer, multiplies it by 2, and returns the result. Make sure to specify type hints for both the parameter and the return value. Finally, evaluate `double_value(5)`.
Показати підказку
Використовуйте n: int як параметр і -> int після сигнатури функції.
Рішення доступне після 3 спроб