Использование аннотации типов в Python

Опубликован: 16.11.2023 99

Python относится к языкам программирования со строгой динамической типизацией. Это означает, что типы переменных определяются в процессе присваивания им значений и могут изменяться в ходе исполнения программы.

Такой вид типизации, с одной стороны, облегчает разработку программ, а с другой, может негативно сказываться на их надежности, так как затрудняется чтение и поддержание больших объемов кода, а это может приводить к ошибкам (в том числе неявным) в процессе выполнения программы.

Для решения этой проблемы в Python был добавлен специальный синтаксис (аннотация типов) - возможность объявлять типы аргументов и возвращаемого значения функций, типы переменных, коллекций, классов и других объектов.

Аннотация типов никак не влияет на выполнение программы интерпретатором Python и предназначена для упрощения статического анализа кода, рефакторинга, контроля типов в рантайме и кодогенерацию, использующую информацию о типах.

# Указание типов аргументов и возвращаемого значения функции
# Аннотация типа аргумента определяется после его имени через двоеточие `:` 
# Аннотация типа возвращаемого значения указывается после символов ->

def repeater(s: str, num: int) -> str:
   return s * num

def greeting(name: str = "Дима") -> str:
    return "Привет, " + name

Аналогично можно аннотировать переменные других базовых типов данных: int, float, bool, str, bytes, None.

a: int = 10
b: int = 15

def sq_sum(val_a: int, val_b: int) -> int:
    return val_a**2 + val_b**2

print(sq_sum(a, b))

Для аннотирования переменных контейнерного типа (списка, кортежа, словаря, множества) помимо указания типа класса контейнера List, Tuple, Dict, Set принято указывать типы данных, которые содержит контейнер, с помощью квадратных скобок [].

# тип всех элементов списка
colors: list[str]

# тип каждого элемента кортежа
person_info: tuple[str, int, float, float]

# тип ключей, тип значений
product_prices: dict[str, float]

# тип всех элементов множества
skills: set[str]

В случае, если заранее не известно, какой тип у переменной или объекта, можно при аннотировании использовать особый тип Any, что соответствует любому типу данных.

from typing import Any

def func(arg: Any) -> Any:
    return arg

Таким образом, аннотирование типов улучшает информативность и читабельность кода, позволяет контролировать соответствие используемых в программе типов переменных с помощью специальных инструментов (type-чекеров: таких как - mypy, pyre, pytype, pyright), существенно облегчает выявление и устранение ошибок, связанных с типами данных.

Похожие посты

Оценка основных статистических метрик набора данных в Python

Область эффективного использования lambda функции в Python

Логические выражения if ... else в Pythonic стиле

Способы удаления лишних пробелов в строке

Комментариев нет.