Типы в Python

В этой статье объясняются типы в Python.

YouTube Video

Типы в Python

Модуль typing в Python используется для введения подсказок типов (type hints) в Python. Он был впервые представлен в Python 3.5 и используется для повышения читаемости и удобства сопровождения кода. Подсказки типов не влияют на выполнение кода, но позволяют проверять типы с помощью IDE и инструментов статического анализа.

Основы подсказок типов

Подсказки типов проясняют суть кода за счёт явного указания типов функций и переменных. В приведённом ниже примере указаны типы аргументов и возвращаемого значения.

1def add_numbers(a: int, b: int) -> int:
2    return a + b
3
4result: int = add_numbers(5, 10)
5print(result)  # 15

В приведённом выше коде a и b являются целыми числами (int), а возвращаемое значение функции также явно указано как целое число. Даже с подсказками типов строгого соблюдения типов не происходит, но в случае несоответствия типов во время разработки могут отображаться предупреждения.

Ключевые подсказки типов

Модуль typing в Python предоставляет различные классы и функции для определения подсказок типов. Ниже приведён список распространённых подсказок типов.

  • int: целое число
  • str: строка
  • float: число с плавающей точкой
  • bool: булево значение
  • List: список
  • Dict: словарь
  • Tuple: кортеж
  • Set: множество

Тип List

Тип списка указывается с помощью класса List. Вы также можете явно указать тип элементов внутри списка.

1from typing import List
2
3def sum_list(numbers: List[int]) -> int:
4    return sum(numbers)
5
6print(sum_list([1, 2, 3]))  # 6

В этом примере ожидается, что все элементы списка будут типа int.

Тип Dict

Тип словаря определяется с помощью Dict. Типы ключей и значений могут быть указаны.

1from typing import Dict
2
3def get_student_age(students: Dict[str, int], name: str) -> int:
4    return students.get(name, 0)
5
6students = {"Alice": 23, "Bob": 19}
7print(get_student_age(students, "Alice"))  # 23

В этом примере словарь использует str как тип ключа и int как тип значения.

Тип Tuple

Кортежи указываются с использованием типа Tuple. Вы можете указать тип каждого элемента кортежа отдельно.

1from typing import Tuple
2
3def get_person() -> Tuple[str, int]:
4    return "Alice", 30
5
6name, age = get_person()
7print(name, age)  # Alice 30

Здесь функция get_person возвращает кортеж, содержащий строку и число.

Тип Union

Тип Union используется для явного указания, что допустимы несколько типов.

1from typing import Union
2
3def process_value(value: Union[int, float]) -> float:
4    return value * 2.0
5
6print(process_value(10))  # 20.0
7print(process_value(3.5))  # 7.0

В этом примере функция process_value принимает либо int, либо float в качестве аргумента и возвращает результат типа float.

Тип Optional

Тип Optional используется, когда переменная может быть None. Он представлен в качестве сокращения для Union[Type, None].

1from typing import Optional
2
3def greet(name: Optional[str] = None) -> str:
4    if name is None:
5        return "Hello, Guest!"
6    return f"Hello, {name}!"
7
8print(greet())  # Hello, Guest!
9print(greet("Alice"))  # Hello, Alice!

Здесь показано, что если name не указан, он рассматривается как None.

Обобщённые типы

Обобщённые типы — это способ абстрактного представления типа элементов, которые содержит структура данных. В модуле typing вы можете определить обобщённые типы с использованием TypeVar.

1from typing import TypeVar, List
2
3T = TypeVar('T')
4
5def get_first_element(elements: List[T]) -> T:
6    return elements[0]
7
8print(get_first_element([1, 2, 3]))  # 1
9print(get_first_element(["a", "b", "c"]))  # a

В этом примере get_first_element — это функция, которая возвращает первый элемент списка, и она работает независимо от типа списка.

Псевдонимы типов

Псевдоним типа — это способ упростить сложные определения типов, дав им понятное имя.

1from typing import List, Tuple
2
3Coordinates = List[Tuple[int, int]]
4
5def get_coordinates() -> Coordinates:
6    return [(0, 0), (1, 1), (2, 2)]
7
8print(get_coordinates())  # [(0, 0), (1, 1), (2, 2)]

В этом примере псевдоним типа Coordinates определён для простого представления типа с кортежами внутри списка.

Резюме

Модуль typing в Python очень полезен для улучшения читаемости и сопровождаемости кода. При правильном использовании подсказок типов можно предотвратить несоответствия типов и ошибки, особенно в крупных проектах или при командной разработке. Типы являются лишь инструментом поддержки разработки и не влияют на поведение программы во время выполнения, что сохраняет гибкость кода.

Вы можете следовать этой статье, используя Visual Studio Code на нашем YouTube-канале. Пожалуйста, также посмотрите наш YouTube-канал.

YouTube Video