Опубликован: 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 стиле
Способы удаления лишних пробелов в строке
Комментариев нет.