Указание желаемого типа
На этом этапе мы рассмотрим, как указывать желаемый тип для переменных и аргументов функций, а также как применять эти типы с помощью подсказок типов (type hints) и условных проверок. Хотя Python - это динамически типизированный язык, подсказки типов позволяют добавить статическую информацию о типах в ваш код, которую можно использовать инструментами для проверки типов, такими как mypy
, чтобы выявить ошибки типов до запуска программы.
Подсказки типов - это аннотации, которые указывают ожидаемый тип переменной, аргумента функции или возвращаемого значения функции. Они записываются с использованием синтаксиса :
для переменных и аргументов и синтаксиса ->
для возвращаемых значений.
Начнем с добавления подсказок типов в наш предыдущий пример.
-
Откройте редактор VS Code в среде LabEx.
-
Создайте новый файл с именем type_hints.py
в директории ~/project
.
~/project/type_hints.py
-
Добавьте следующий код в файл type_hints.py
:
def add_numbers(x: int, y: int) -> int:
"""Adds two numbers together."""
return x + y
## Example usage
result: int = add_numbers(5, 3)
print(f"Result: {result}")
## Example with incorrect types
## This will not raise an error at runtime, but a type checker will flag it
## result: int = add_numbers("5", "3")
## print(f"Result: {result}")
В этом скрипте:
x: int
и y: int
указывают, что аргументы x
и y
должны быть целыми числами.
-> int
указывает, что функция add_numbers
должна возвращать целое число.
result: int
указывает, что переменная result
должна быть целым числом.
-
Запустите скрипт с помощью команды python
в терминале:
python ~/project/type_hints.py
Вы должны увидеть вывод, похожий на следующий:
Result: 8
Скрипт запускается без ошибок, так как типы указаны правильно. Однако, если вы раскомментируете строки с неправильными типами, скрипт все еще будет запускаться, но инструмент для проверки типов, такой как mypy
, будет помечать эти строки как ошибки типов.
Для установки и запуска mypy
вы можете использовать следующие команды:
pip install mypy
mypy ~/project/type_hints.py
Поскольку pip
не предварительно настроен, вы можете столкнуться с ошибками, связанными с отсутствием пакетов или неправильными версиями. В рамках этого практического занятия мы сосредоточимся на демонстрации концепции подсказок типов и условных проверок.
Другой способ применить типы - использовать условные проверки в вашем коде. Это позволяет вызывать исключения, если типы не соответствуют ожиданиям.
def divide_numbers(x, y):
if not isinstance(x, (int, float)):
raise TypeError("x must be a number")
if not isinstance(y, (int, float)):
raise TypeError("y must be a number")
if y == 0:
raise ValueError("y cannot be zero")
return x / y
## Example usage
result = divide_numbers(10, 2)
print(f"Result: {result}")
## Example with incorrect types
## This will raise a TypeError
## result = divide_numbers("10", 2)
## print(f"Result: {result}")
В этом примере мы используем функцию isinstance()
для проверки, являются ли x
и y
числами (целыми или с плавающей точкой). Если они не являются числами, мы вызываем исключение TypeError
. Мы также проверяем, равно ли y
нулю, и вызываем исключение ValueError
, если это так.
Объединяя подсказки типов и условные проверки, вы можете написать более надежный и поддерживаемый код на Python, менее подверженный ошибкам типов.