Telegram Group & Telegram Channel
Type Hinting vs. Type Checking vs. Data Validation: в чём разница?

Python — это язык с динамической типизацией («тип переменной определяется во время выполнения программы»). Это даёт большую гибкость, но одновременно приводит к ошибкам. Чтобы справляться с этим, разработчики используют три инструмента: аннотации типов, проверка типов и валидация данных. У каждого из них своя цель.


Type Hinting — подсказки, а не контроль

Аннотации типов (Type Hinting) — это способ добавить метаинформацию о типах данных, которую Python сам по себе не использует для исполнения кода:


def create_user(first_name: str, last_name: str, age: int) -> dict:
return {"first_name": first_name, "last_name": last_name, "age": age}


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


Type Checking

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

### Как работает:

Для статической проверки используется внешний инструмент, например, MyPy


mypy your_script.py


Если передать строку вместо числа:


create_user("John", "Doe", "38") # строка, а не int


MyPy выдаст ошибку:


error: Argument "age" to "create_user" has incompatible type "str"; expected "int"


Важное ограничение: не проверяет данные из внешних источников (например, API).


Data Validation

Валидация данных — это уже проверка во время исполнения программы. Она позволяет остановить программу, если входные данные не соответствуют ожиданиям:


if not isinstance(age, int):
raise TypeError("Age must be an integer")


Ручная валидация быстро становится громоздкой. Здесь на помощь приходят библиотеки, такие как Pydantic.

Pydantic использует type hints для автоматической валидации данных. Пример с использованием @validate_call:


from pydantic import validate_call

@validate_call
def create_user(first_name: str, last_name: str, age: int) -> dict:
return {"first_name": first_name, "last_name": last_name, "age": age}


Если передать некорректный тип:


create_user("John", "Doe", "38") # строка


Вы получите подробное сообщение об ошибке:


1 validation error for create_user
age
Input should be a valid integer (type=type_error.integer)


#основы
@zen_of_python



tg-me.com/zen_of_python/4295
Create:
Last Update:

Type Hinting vs. Type Checking vs. Data Validation: в чём разница?

Python — это язык с динамической типизацией («тип переменной определяется во время выполнения программы»). Это даёт большую гибкость, но одновременно приводит к ошибкам. Чтобы справляться с этим, разработчики используют три инструмента: аннотации типов, проверка типов и валидация данных. У каждого из них своя цель.


Type Hinting — подсказки, а не контроль

Аннотации типов (Type Hinting) — это способ добавить метаинформацию о типах данных, которую Python сам по себе не использует для исполнения кода:


def create_user(first_name: str, last_name: str, age: int) -> dict:
return {"first_name": first_name, "last_name": last_name, "age": age}


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


Type Checking

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

### Как работает:

Для статической проверки используется внешний инструмент, например, MyPy


mypy your_script.py


Если передать строку вместо числа:


create_user("John", "Doe", "38") # строка, а не int


MyPy выдаст ошибку:


error: Argument "age" to "create_user" has incompatible type "str"; expected "int"


Важное ограничение: не проверяет данные из внешних источников (например, API).


Data Validation

Валидация данных — это уже проверка во время исполнения программы. Она позволяет остановить программу, если входные данные не соответствуют ожиданиям:


if not isinstance(age, int):
raise TypeError("Age must be an integer")


Ручная валидация быстро становится громоздкой. Здесь на помощь приходят библиотеки, такие как Pydantic.

Pydantic использует type hints для автоматической валидации данных. Пример с использованием @validate_call:


from pydantic import validate_call

@validate_call
def create_user(first_name: str, last_name: str, age: int) -> dict:
return {"first_name": first_name, "last_name": last_name, "age": age}


Если передать некорректный тип:


create_user("John", "Doe", "38") # строка


Вы получите подробное сообщение об ошибке:


1 validation error for create_user
age
Input should be a valid integer (type=type_error.integer)


#основы
@zen_of_python

BY Zen of Python


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/zen_of_python/4295

View MORE
Open in Telegram


Zen of Python Telegram | DID YOU KNOW?

Date: |

Newly uncovered hack campaign in Telegram

The campaign, which security firm Check Point has named Rampant Kitten, comprises two main components, one for Windows and the other for Android. Rampant Kitten’s objective is to steal Telegram messages, passwords, and two-factor authentication codes sent by SMS and then also take screenshots and record sounds within earshot of an infected phone, the researchers said in a post published on Friday.

China’s stock markets are some of the largest in the world, with total market capitalization reaching RMB 79 trillion (US$12.2 trillion) in 2020. China’s stock markets are seen as a crucial tool for driving economic growth, in particular for financing the country’s rapidly growing high-tech sectors.Although traditionally closed off to overseas investors, China’s financial markets have gradually been loosening restrictions over the past couple of decades. At the same time, reforms have sought to make it easier for Chinese companies to list on onshore stock exchanges, and new programs have been launched in attempts to lure some of China’s most coveted overseas-listed companies back to the country.

Zen of Python from us


Telegram Zen of Python
FROM USA