Аннотация типов в Python

Аннотация типов в Python

Рассмотрим как правильно использовать аннотации типов в Python.

Введение

Python — язык с динамической типизацией и прямое указание типов переменным не требуется. Но для программиста использовать аннотации очень удобно как в процессе разработки, так и во время отладки своего приложения.

В компилируемых языках программирования, таких как Java, C, C++ и Go, переменные строго типизируются — это означает, что при создании переменной необходимо указывать тип переменной.

Например, создание переменных в Java:

String name = "Egor";       

int age; 
                   
age = 29;

В отличие от Java, Python предоставляет нам гибкость в объявлении и присвоении переменных без указания их типов:

name = "Egor"

age = 29

При таком типе кодирования Python автоматически вычисляет тип данных, который был присвоен переменной. Проверить это можно с помощью функции type():

print(type(name))              
<class 'str'>

print(type(age))               
<class 'int'>

Указание типов в переменных

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

Указать тип переменной при ее объявлении

variable_name: variable_type = value

weather: str = "cloudy"

degrees: int                    

degrees = 32

Также обратите внимание, что даже после того, как на Python указан тип переменной, вы все равно можете присвоить ей другой тип данных:

degrees: int = 32
32

degrees = "thirty-two"
thirty-two

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

Указание типов в функциях

Подсказки типов очень полезны в функциях, в основном при декларировании параметров функции.

Например, вот простая функция, которая принимает два аргумента и возвращает сумму.

def sum(a, b):
    return a + b

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

Вызов этой функции работает при поставке значений int и других значений, таких как строки, списки и кортежи:

sum(3, 5)                               
8

sum([1, 0, 5], ['java', 'c++'])
[1, 0, 5, 'java', 'c++']

sum('2', '3')                           
23

Здесь видно, что функция sum() хорошо работает, когда она вызывается либо со значениями int, либо со строковыми значениями, либо даже со списками.

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

Чтобы указать, что мы хотим разрешить только типы int, мы можем изменить определение функции так, чтобы оно выглядело так:

def sum(a: int, b: int):
    return a + b

Это информирует вызывающую функцию о том, что аргументы, требуемые для функции sum(), должны быть целыми числами, а не иначе.

Аналогично, чтобы указать только строковые типы, мы изменим нашу функцию, чтобы она указывала как:

def sum(a: str, b: str):
    return a + b

Указание типа возврата функции

Можно также указать возвращаемое значение вызова функции:

def sum(number1, number2) -> int:
    return number1 + number1

Это информирует вызывающую функцию о том, что тип возврата функции sum() должен быть целым числом.

Заключение

Использование аннотаций типов позволяет разработчикам легче читать код и искать возникающие ошибки.

Егор Егоров

Программирую на Python с 2017 года. Люблю создавать контент, который помогает людям понять сложные вещи. Не представляю жизнь без непрерывного цикла обучения, спорта и чувства юмора.

Ссылка на мой github есть в шапке. Залетай.

Оцените автора
Егоров Егор
Добавить комментарий

  1. Дмитрий

    Не так давно занимаюсь Python. Долго искал нормальное объяснение по «Аннотации типов». Наконец все сразу стало на свои место. Спасибо за такое доступное объяснение.

    Ответить
  2. Егор Егоров автор

    Ага, мысль в голове запуталась 🙂

    Ответить