Если честно: большинство преимуществ динамических языков (обратите внимание, что я говорю «динамический язык», а не «язык с динамической типизацией») не имеют ничего общего с самой динамической типизацией (а Python - мой любимый язык!).Им уделяют столько внимания, потому что большинство статически типизированных языков плохо сосут, когда дело доходит до гибкости.На Хаскелл часто указывают, когда дело доходит до этой темы - по причине.На практике я вижу небольшое различие между тем, что могут делать статические, но выразительные (например, по сути универсальные) и динамические системы типов.
Основное преимущество, обычно связанное с динамической типизацией, - это расширенный полиморфизм / тип утки / общее программирование.Например, большая часть моего кода Python работает так же хорошо, если кто-то приходит и передает ему что-то другого типа, если он имеет поля / методы, которые использует мой код (при условии, что они также приблизительно эквивалентны).По сути, это избавляет нас от необходимости создавать максимально минималистичный интерфейс и явно реализовывать его в каждом классе, который мы хотим передать этой конкретной функции.Преимущества должны быть очевидны.
Как отмечалось выше, это не связано со статической / динамической типизацией (есть эта структурная типизация чтоли, которая, по-моему, сводится к уткеввод с более обширными проверками компиляции во время компиляции).Тем не менее, на практике эти два идут рука об руку, поскольку нет статически типизированного основного языка со структурной типизацией (ML / Ocaml / Haskell / ... совсем не мейнстрим, и Go еще предстоит пройти долгий путь) свозможное исключение из шаблонов C ++ (которые представляют собой бесконечную боль по сравнению, например, с Haskell).