Python – это динамически напечатанный язык программирования. Это означает, что проверка типа выполняется во время выполнения. Pep484
Введенные подсказки типа, что позволяет добавлять тип подсказки к переменным и функциональным подписям.
Представьте себе функцию Say_Hello
который берет и возвращает строку. Без подсказок, эта функция выглядела так:
def say_hello(name): return "Hello " + name
Это может быть аннотировано следующим образом:
def say_hello(name: str) -> str: return "Hello " + name
Тип псевдонимов
Определить функцию itemize_names
Это принимает список имен и возвращает новый список с именами, пронумерованными от 1 до n. Реализация функции можно найти ниже:
def itemize_names(names): return [f"{pos + 1}. {name}" for pos, name in enumerate(names)]
Чтобы аннотировать функцию псевдоним может быть создана для имен:
from typing import List NameList = List[str] def itemize_names(names: NameList) -> NameList: return [f"{pos + 1}. {name}" for pos, name in enumerate(names)]
Модуль набора текста обеспечивает поддержку намного больше, например:
- Создание нового типа
- Аннотация функции, которая принимает обратный вызов
- Универсал
Вы можете найти Документация здесь Чтобы узнать, как добавить тип подсказок в свой код Python.
Тип проверки
Хотя вы можете добавить аннотации типа в свой код, время выполнения Python не поддерживает аннотации типа. Продемонстрировать, Say_Hello
Функция, определенная ранее, может быть переписана, как это, не создавая никаких изменений в функциональности.
def say_hello(name: str) -> int: return "Hello " + name
Вы также не получите предупреждение от Python.
Чтобы обеспечить проверки типа, существует несколько шашек статического типа. Я бы использовал Marpy
Отказ
Давайте установим Marpy
Чтобы получить эти проверки, которые нам нужны. Вы можете установить Marpy
С помощью этой команды:
$ python3 -m pip install mypy
Напечатать проверку нашего Say_Hello
Функция, скажем, что она содержится в say_hello.py
файл:
$ mypy say_hello.py say_hello.py:2: error: Incompatible return value type (got "str", expected "int") Found 1 error in 1 file (checked 1 source file)
Давайте исправим ошибку, изменив ожидаемый тип возврата в ул ...| И введите проверьте наш файл еще раз:
$ mypy say_hello.py Success: no issues found in 1 source file
Mypy документация Предоставляет всю информацию, необходимую для использования Marpy
в ваших проектах.
Спасибо за чтение.
Оригинал: “https://dev.to/chief_oye/annotations-and-type-checking-in-python-34j8”