Перейти к основному содержимому
Модуль 9 · Урок 1 из 433/36 в курсе~12 min
Уроки модуля (1/4)

Подсказки по типам: типы аннотаций

Подсказки типов (аннотации типов) — это необязательные объявления, в которых говорится: «эта переменная/параметр имеет тип X». Python НЕ проверяет их во время выполнения: они предназначены для вас, вашего редактора (автозаполнение!) и таких инструментов, как mypy или pyright, выполняющие статическую проверку типов.

Аннотирование переменных

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

Синтаксис: name: type = value. Без значения это чистое объявление:

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

Функции аннотирования

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)

Синтаксис: param: type для каждого параметра, -> type для возврата. Функция, которая ничего не возвращает, использует -> None.

Встроенные универсальные типы (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}

Необязательно и Союз

Значение, которое может быть None:

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

X | None — это современный синтаксис (Python 3.10+). Эквивалент: Optional[X] из typing. Для объединений нескольких типов: int | str | float.

набор текста: полезные инструменты

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 = «не проверять» (используйте экономно).
  • Callable[[arg1, arg2], return] = функция, которая принимает эти параметры и возвращает этот тип.

mypy: средство проверки типов

Вы устанавливаете mypy, запускаете mypy file.py, и он сообщает вам, совпадают ли типы:

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

Проверка типов с помощью mypy

Подсказки типов Python не применяются интерпретатором во время выполнения; они игнорируются во время выполнения. Чтобы проверить правильность типа, вы должны запустить внешний инструмент статического анализа, например mypy, выполнив команду mypy script.py в своем терминале.

Попробуйте сами

Упражнение#python.m9.l1.e1
Попыток: 0Загрузка…

Определите функцию double(numbers: list[int]) -> list[int]`, которая возвращает список, в котором каждый элемент умножен на 2. Вызовите ее с помощью [1, 2, 3] и присвойте `r`. Оцените `r`.

Загрузка редактора…
Показать подсказку

Используйте понимание списка или цикл for.

Решение доступно после 3 попыток

Обзор упражнения

Упражнение#python.m9.l1.e2
Попыток: 0Загрузка…

Определите `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 попыток

Дополнительная задача

Упражнение#python.m9.l1.e3
Попыток: 0Загрузка…

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 попыток