Um ehrlich zu sein: Die meisten Vorteile dynamische Sprachen (beachten Sie, dass ich sage "dynamische Sprache", nicht "dynamisch-typisierte Sprache") Angebot haben nichts mit dynamischen Typisierung selbst zu tun (und Python ist mein Favorit Sprache!). Sie bekommen nur so viel Aufmerksamkeit, weil die meisten statisch-typisierten Sprachen in Sachen Flexibilität stark saugen. Auf Haskell wird oft hingewiesen, wenn es um dieses Thema geht - aus einem Grund. In der Praxis sehe ich wenig Unterschied zwischen dem, was ein statisches aber ausdrucksvolles (z. B. inhärent generisches) und ein dynamisches System leisten kann.
Der Hauptvorteil, der normalerweise mit dynamischer Typisierung verbunden ist, ist umfangreicher Polymorphismus/Entenschrift/generisches Programmieren. Z.B. Der Großteil meines Python-Codes funktioniert genauso gut, wenn jemand kommt und ihm etwas von einem anderen Typ übergibt, solange er die Felder/Methoden hat, die mein Code verwendet (vorausgesetzt, diese sind auch ungefähr gleichwertig). Im Grunde erspart es uns den Aufwand, ein möglichst minimalistisches Interface zu erstellen, das explizit in jeder Klasse implementiert wird, die wir an diese bestimmte Funktion übergeben möchten. Die Vorteile sollten selbstverständlich sein.
Wie oben erwähnt, diese in keinem Zusammenhang ist zu statisch/dynamisch Typisierung (es gibt dieses structural typing Dingen, die imho nach unten läuft darauf hinaus, Duck Typing mit umfangreichen compilance Kontrollen an compiletime). In der Praxis kommen diese beiden jedoch Hand in Hand, da es keine statisch typisierte Mainstream-Sprache mit struktureller Typisierung gibt (ML/Ocaml/Haskell/... sind alles andere als Mainstream, und Go hat noch einen langen Weg vor sich) mögliche Ausnahme von C++ - Templates (die im Vergleich zu zB Haskell unendlich Schmerz sind).