В чем преимущество динамической типизации Python?

Я заметил, что с опытом программирования я все чаще пишу код, имитирующий статическую типизацию*:

  • используя подсказки типов Python по PEP 484, PEP 526, PEP 544, PEP 586, PEP 589 и PEP 591
  • проверка типов объектов при интерактивной работе
  • написание строк документации с вводом информации
  • заметил, что многие ошибки были вызваны небрежным набором текста при кодировании
  • заметив, что с ростом зрелости в Python добавляется все больше и больше функций, обеспечивающих более строгие параметры типизации.

С другой стороны, я не совсем уверен, что когда-либо извлекал пользу из динамической типизации:

  • Динамическая типизация на самом деле не нужна для интерактивной оболочки, не так ли?
  • Не экономит много времени или нажатия клавиш.
  • Python поддерживает дженерики, если требуется изменчивость типов.
  1. Какова основная причина динамической типизации Python?
  2. Какие приложения позволяют использовать динамическую типизацию, которые были бы невозможны или намного сложнее при использовании статической типизации?

*В основном я имею в виду одно из возможных определений статической и динамической типизации, вращающееся вокруг типа, привязанного к переменной, а не к ее значению (поскольку для интерпретируемого языка определение с помощью проверки при компиляции и во время выполнения неприменимо).


person Zubo    schedule 09.05.2021    source источник
comment
Почему вопросы о языковом дизайне вообще не по теме. См. meta.stackexchange.com/questions/170394/ — наша сфера деятельности ограничена вопросами с ответами, которые решат практическую проблему, с которой вы действительно столкнулись. Более того, даже если бы это было неправдой, мы явно стараемся избегать тем, которые могут вызвать больше жара, чем света — больше аргументов, чем практического содержания — и именно из-за этого конкретного вопроса ведутся религиозные войны.   -  person Charles Duffy    schedule 10.05.2021
comment
Возможно, вам поможет это интервью с Гвидо ван Россумом: artima.com/articles/strong -против слабой типизации   -  person Franco Morero    schedule 10.05.2021
comment
@CharlesDuffy Я понимаю, что действительно искал практическое содержание в виде пары примеров кода и, возможно, ссылки на спецификацию или что-то в этом роде.   -  person Zubo    schedule 10.05.2021
comment
Я не уверен, какие практические примеры или ссылка на спецификацию ответят на ваш вопрос. Спецификация сообщает вам, что такое язык, а не причины, по которым он такой. И практические примеры были бы... что, код с вводом и без ввода, чтобы сравнить количество нажатий клавиш? То, что составляет достаточное количество сэкономленных нажатий клавиш, чтобы оправдать разницу, полностью зависит от глаз смотрящего; время, затрачиваемое на итерацию для получения корректного/собираемого кода, труднее продемонстрировать, и оно также будет варьироваться в зависимости от автора.   -  person Charles Duffy    schedule 10.05.2021
comment
(Отмечу, что в мире Clojure я видел, как несколько магазинов пытались перейти на использование core.typed -- расширение языка, обеспечивающего принудительное использование типов, теперь Typed Clojure -- и позже решите, что это не стоило хлопот, и переключитесь обратно).   -  person Charles Duffy    schedule 10.05.2021
comment
@FrancoMorero Да, это именно то, что я искал. Жаль, что другие части интервью имеют 404-й результат... из интервью я понял, что динамический язык позволяет более свободно разрабатывать и тестировать, и что, по крайней мере, по мнению ван Россума, рабство статической типизации не является так выгодно, как некоторые могут подумать.   -  person Zubo    schedule 10.05.2021
comment
@CharlesDuffy Понятно .. так что это не однозначное решение. У меня было ощущение, что я пропустил какую-то лекцию по программированию, где это определение было ясно разъяснено, и что теперь я упускаю какой-то очевидный вариант использования. Это полезно, спасибо!   -  person Zubo    schedule 10.05.2021
comment
Рискуя начать самоуверенные разглагольствования, многие люди, беспокоящиеся о наборе текста, я думаю, беспокоятся о том, что он сделан плохо. В частности, в мире C++ и Java много шаблонов — кода, написанного только для удовлетворения требований системы типов без другого практического применения, и систем, дизайн которых сильно зависит от потребности в этом коде — без возможности сделать полезные утверждения, которые улучшенная поддержка систем типов (не должно быть нулевым, должно быть допустимым значением для этого типа перечисления, но не конкретно неизвестным и т. д.), вызывая раздражение у многих людей по поводу концепции в целом.   -  person Charles Duffy    schedule 10.05.2021
comment
Академический мир придумал несколько гораздо более мощных систем типов — хорошим примером является Haskell — хотя и они по своей природе имеют тенденцию изменять то, как люди думают о системном дизайне, поэтому обязательно вызывают споры.   -  person Charles Duffy    schedule 10.05.2021