Основы аннотаций типов
Аннотируйте переменные, параметры функций и возвращаемые типы.
«Основы аннотаций типов» — бесплатный урок Python Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.
Что такое аннотации типов
Аннотации типов — это подсказки, объявляющие ожидаемый тип переменных, параметров и возвращаемых значений. Во время выполнения они не проверяются — их считывают средства проверки типов, например mypy.
def greet(name: str) -> str:
return f"Hello, {name}"
result: str = greet("Alice")
print(result)Аннотации переменных
Аннотируйте переменные уровня модуля, класса или локальные переменные двоеточием, после которого указывается тип.
count: int = 0
pi: float = 3.14159
name: str = "Python"
flag: bool = True
# Annotation without assignment (declaration only)
future_value: intАннотации параметров функций
Аннотируйте каждый параметр в сигнатуре функции. Используйте -> type, чтобы аннотировать возвращаемый тип.
def add(a: int, b: int) -> int:
return a + b
def repeat(text: str, times: int = 1) -> str:
return text * times
def no_return() -> None:
print("side effect only")Встроенные типы коллекций (Python 3.9+)
Начиная с Python 3.9 используйте встроенные типы в нижнем регистре непосредственно как обобщённые типы: list[int], dict[str, int], tuple[int, ...].
def total(numbers: list[int]) -> int:
return sum(numbers)
def config() -> dict[str, str]:
return {"host": "localhost", "port": "8080"}
def coords() -> tuple[float, float]:
return (1.0, 2.0)Optional и Union
X | None (Python 3.10+) или Optional[X] означает, что значение может иметь тип X или быть равным None. X | Y означает, что значение может иметь тип X или Y.
from typing import Optional
def find(items: list[int], target: int) -> int | None:
return next((x for x in items if x == target), None)
# Older style:
# def find(...) -> Optional[int]:Типы Union
int | str (Python 3.10+) или Union[int, str] обозначает значение, которое может иметь один из нескольких типов.
from typing import Union
def process(value: int | str) -> str:
return str(value)
# Older style:
# def process(value: Union[int, str]) -> str:Псевдонимы типов
Присвойте выражение типа имени, чтобы создать повторно используемый псевдоним и повысить читаемость.
from typing import TypeAlias
Vector: TypeAlias = list[float]
Matrix: TypeAlias = list[Vector]
def dot(a: Vector, b: Vector) -> float:
return sum(x * y for x, y in zip(a, b))Аннотации Callable
Используйте Callable[[arg_types], return_type], чтобы аннотировать функции, передаваемые в качестве аргументов.
from typing import Callable
def apply(func: Callable[[int, int], int], x: int, y: int) -> int:
return func(x, y)
result = apply(lambda a, b: a + b, 3, 4)
print(result) # 7Аннотирование *args и **kwargs
Аннотируйте *args типом элементов, а не кортежем, и **kwargs типом значений.
def log(*messages: str, level: str = "INFO") -> None:
for msg in messages:
print(f"[{level}] {msg}")
def configure(**options: int) -> None:
for key, val in options.items():
print(f"{key}: {val}")from __future__ import annotations
Добавьте этот импорт в начало файла, чтобы включить отложенное вычисление аннотаций и использовать прямые ссылки без кавычек.
from __future__ import annotations
class Node:
def __init__(self, value: int, next: Node | None = None):
self.value = value
self.next = next # forward ref to Node works hereЗащита TYPE_CHECKING
Импортируйте типы только во время проверки типов, а не во время выполнения, чтобы избежать циклических импортов или тяжёлых импортов.
from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from mymodule import HeavyClass
def process(obj: HeavyClass) -> None:
... # HeavyClass not imported at runtimeБыстрая проверка
Какой синтаксис аннотации помечает функцию как не возвращающую значение?
Итоги
Аннотируйте переменные с помощью name: Type, параметры — с помощью param: Type, а возвращаемые значения — с помощью -> Type. Используйте list[T], dict[K,V] (Python 3.9+), X | None (3.10+) и from __future__ import annotations для прямых ссылок.
Часто задаваемые вопросы
Урок «Основы аннотаций типов» бесплатный?
Да — полный текст урока «Основы аннотаций типов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.
Чему я научусь в уроке «Основы аннотаций типов»?
Аннотируйте переменные, параметры функций и возвращаемые типы. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Python Academy?
Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Основы аннотаций типов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Python Academy?
Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы аннотаций типов
- Сложные типы: List, Dict, Optional, Union
- TypeVar, обобщённые классы и Protocol
- Запуск mypy и исправление ошибок типов