Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Галя Маратов Знаток (438), закрыт 2 года назад
Я Программирую на Kotlin и Java. Со вчерашнего дня изучаю Python. Я прочитал где-то про динамическую типизацию и подумал как же это круто что язык настолько упростили, что не нужно указывать тип переменной. Но когда я встретил примеры функций и методов, то понял что всё очень плохо. Понять какой тип переменной от нас требуют можно только по названию аргумента в самой функции. Но что если аргумент назван не понятно? Придёться шерстить код чтоб понять, какой тип переменной нужно передать. Это ужасно.
Просто решил поделиться своей болью. Что думаете вы?
Лучший ответ
Vitness Просветленный (35236) 2 года назад
Есть тайпхинтинг (указание предполагаемого типа переменной) и докстринги (описание функций, классов). В нормальном ide это все еще и удобно отображаться будет
Остальные ответы
Сеня Сенечкин Мудрец (13126) 2 года назад
поэтому существуют аннотации типов и подсказки в твоей ide.
если аргумент назван непонятно - бей по рукам его создателю и не используйте его код. говнокодеров в любом языке хватает
Дональд Дак Гуру (3255) 2 года назад
в котлине тоже вроде не пишут тип переменной. var, val и еще много всякой фигни. мне java больше нравится
Галя МаратовЗнаток (438) 2 года назад
Пишут, но это не является обязательным условием, а var и val - это изменяемая и неизменяемая переменная
Дональд Дак Гуру (3255) Галя Маратов, я знаю. тоже непонятно что там за переменная (тип). и еще всякие конструкции с let и прочее. такая же хрень этот котлин как и питон
Άηϑρέΰ ҂ Искусственный Интеллект (180095) 2 года назад
типизация упрощает жизнь компилятору или интерпретатору и отчасти программистам , но для последних это лишние телодвижения.. в питоне 3.10 ее можно задавать при желании (видно доходят правильные мысли до разработчиков). по мне очень нужная вещь
Андрей Высший разум (483616) 2 года назад
Надо различать статическую/динамическую и сильную/слабую типизацию.
В языке 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 та же слабая динамическая типизация.
Похожие вопросы