0Pricing
Python Academy · Урок

Основы аннотаций типов

Аннотируйте переменные, параметры функций и возвращаемые типы.

«Основы аннотаций типов» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Основы аннотаций типов
  2. Сложные типы: List, Dict, Optional, Union
  3. TypeVar, обобщённые классы и Protocol
  4. Запуск mypy и исправление ошибок типов
← Назад к Python Academy