Да, аннотации типов чаще всего не влияют на работу (хотя некоторые фреймворки и библиотеки на них завязаны, об этом ниже). Никто не мешает указать аргумент функции типа int, а передавать строку. Если функция сможет эту строку пережевать, то все отлично отработает. Пример
def foo(a: int):
return a*2
print(foo(4)) # 8
print(foo('str')) # 'strstr'
Но аннотация потому и называется аннотацией, а не типизацией. Мы даем подсказки себе и другим разработчикам, кто пользуется этим кодом. Указываем на то, какие типы тут используются. И если в случае с базовыми типами (int str list и пр.) польза не так заметна, то когда в ход пойдут свои классы, польза становится очевидной.
А если взять, например
FastApi фреймворк с
Pydantic под капотом, то там уже не получится без аннотаций работать. Там вся суть на этих аннотациях завязана.
Также есть тот же
mypy, который может проанализировать код, указать в каких местах в функцию передается не то, что она должна принимать. Иногда это помогает избежать ошибок еще до запуска кода.
Плюс аннотации зачастую помогают при работе в IDE. Например PyCharm умеет давать подсказки по ходу написания кода основываясь на аннотациях типов.
тот кто будет ее юзать не будет же ее исходник смотреть он в доки пойдет
Не всегда документация соответствует действительности. Ее могут забыть обновить. Она может быть написана криво. Иногда проще посмотреть на внутрянку проекта и понять что делает тот или иной метод, посмотреть какие типы он использует. В этом случае аннотации служат огромным подспорьем.
Советую использовать их чаще.