Python

Что вы думаете об динамической типизации в Python?

Я Программирую на Kotlin и Java. Со вчерашнего дня изучаю Python. Я прочитал где-то про динамическую типизацию и подумал как же это круто что язык настолько упростили, что не нужно указывать тип переменной. Но когда я встретил примеры функций и методов, то понял что всё очень плохо. Понять какой тип переменной от нас требуют можно только по названию аргумента в самой функции. Но что если аргумент назван не понятно? Придёться шерстить код чтоб понять, какой тип переменной нужно передать. Это ужасно.
Просто решил поделиться своей болью. Что думаете вы?
Сергей *****
Сергей *****
438
Есть тайпхинтинг (указание предполагаемого типа переменной) и докстринги (описание функций, классов). В нормальном ide это все еще и удобно отображаться будет
Нурлан Борамбаев
Нурлан Борамбаев
34 940
Лучший ответ
Надо различать статическую/динамическую и сильную/слабую типизацию.
В языке C типизация статическая (надо явно объявлять типы переменных), но слабая (разрешено автоматическое неявное преобразование типов) - так что надёжность C-кода ещё ниже, чем надёжность JavaScript-кода.

Сильная (неявное преобразование типов запрещено) статическая типизация позволяет писать многократно более надёжный код - да, за счёт того, что код пишется чуть медленнее. Динамические языки позволяют очень быстро написать скрипт, содержащий множество ошибок, которые интерпретатор не обнаружит.

Хуже всего дела обстоят в JS - там в принципе контроля типов не существует.

Из популярных динамических языков более-менее нормальный контроль типов есть только в PHP (с Ruby работать не приходилось, так что про контроль типов в этом языке ничего не знаю).

Аннотации типов в Python - филькина грамота. Такой код будет выполнен без каких либо предупреждений и ошибок и напечатает xyz:
 def tst(a : dict, b: float) -> bool: return a + b
print(tst('x', 'yz'))
Т.е. в коде типы объявлены, а по факту интерпретатору Python на все эти объявления глубоко насрать.

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

Но в Python ситуация всё же чуть лучше, чем в JS - за счёт запрета на автоматическое преобразование string <-> number. Впрочем, это не делает типизацию Python сильной: другие автоматические преобразования типов в языке разрешены, так что в Python та же слабая динамическая типизация.
Денис Кочетков
Денис Кочетков
65 252
типизация упрощает жизнь компилятору или интерпретатору и отчасти программистам , но для последних это лишние телодвижения.. в питоне 3.10 ее можно задавать при желании (видно доходят правильные мысли до разработчиков). по мне очень нужная вещь
Алексей Ерохин
Алексей Ерохин
66 655
поэтому существуют аннотации типов и подсказки в твоей ide.
если аргумент назван непонятно - бей по рукам его создателю и не используйте его код. говнокодеров в любом языке хватает
R@
R @ M I L Jumayev
12 881
в котлине тоже вроде не пишут тип переменной. var, val и еще много всякой фигни. мне java больше нравится
Дмитрий Кот
Дмитрий Кот
3 249
Сергей ***** Пишут, но это не является обязательным условием, а var и val - это изменяемая и неизменяемая переменная