Ответ
Проверка типов (type checking) — это процесс анализа кода с целью убедиться, что типы данных, используемые в операциях, совместимы друг с другом. В Python существует два подхода:
-
Динамическая типизация (по умолчанию) Проверка типов происходит во время выполнения кода. Если операция недопустима (например, сложение числа и строки), интерпретатор вызовет исключение
TypeError.# Этот код выполнится, но упадет с ошибкой TypeError def add(a, b): return a + b add(5, "text") # Ошибка возникнет только в момент вызова -
Статическая типизация (опционально) Проверка выполняется до запуска программы с помощью специальных инструментов (линтеров), таких как
mypy. Для этого используется синтаксис аннотаций типов (type hints), введенный в PEP 484.Пример со статической проверкой:
# mypy обнаружит ошибку до запуска этого кода def greet(name: str) -> str: return f"Hello, {name}" greet("Alice") # OK greet(42) # Ошибка: Argument 1 to "greet" has incompatible type "int"; expected "str"
Ключевые преимущества статической проверки:
- Раннее обнаружение ошибок: Проблемы с типами выявляются на этапе разработки, а не у пользователя.
- Улучшение читаемости: Аннотации служат документацией, делая код понятнее.
- Помощь IDE: Редакторы кода используют аннотации для более точного автодополнения и анализа.
Ответ 18+ 🔞
А, слушай, ну это же про ту самую магию, когда твой код не превращается в тыкву в самый неподходящий момент! Проверка типов, блядь — это как раз про то, чтобы не вышло, что ты складываешь помидоры с гвоздями, а потом охуеваешь от результата.
Вот смотри, в Питоне, этой нашей свободолюбивой зверюге, по умолчанию всё — динамика, ёпта! Проверяет он типы прямо на ходу, когда код уже бежит. Сделал какую-то хуйню — сложил число со строкой — он тебе тут же, на месте, и выдаст: «Э, дружок-пирожок, TypeError, иди нахуй, так нельзя».
# Вот эта штука скомпилируется, но потом, в самый ответственный момент, пизданет!
def сложить(a, b):
return a + b
сложить(5, "текст") # И вот тут-то тебя и накроет ошибкой, когда уже поздно пить боржоми.
Ну а есть второй путь — для параноиков и любителей порядка, блядь. Статическая проверка. Это когда ты заранее, как хитрая жопа, расставляешь по коду подсказки-аннотации, а потом специальный стукач, типа mypy, проходит по нему и говорит: «Э, мудила, тут у тебя на 42-й строке потенциальный пиздец, чини давай». И всё это — ДО того, как ты вообще запустил скрипт.
Пример, где мы умные и всё предвидим:
# mypy этот код просканирует и сразу начнёт орать, что что-то не так
def поздороваться(имя: str) -> str:
return f"Привет, {имя}"
поздороваться("Алиса") # Всё ок, идём дальше
поздороваться(42) # А вот тут mypy взвоет: "Аргумент 1 для 'поздороваться' имеет несовместимый тип 'int'; ожидался 'str'"
И зачем, спрашивается, этот геморрой? А вот зачем, ебать мои старые костыли:
- Ловим гадов раньше: Ошибки с типами вылезают не у пользователя в три часа ночи, а у тебя на компе, пока ты пьёшь кофе. Волнение ебать — ноль.
- Код не как китайская грамота: Аннотации — это такая встроенная документация. Глянул на функцию — и сразу ясно, что она жрёт и что блевать обратно.
- IDE умнеет: Разные там PyCharm'ы и VS Code смотрят на эти аннотации и начинают тебе такое умное автодополнение подсказывать, что просто охуенно.