Типы в 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-канал.