Проблема в том, что в питоне компилятор очень условный. Считай его
нет. И пока ты абсолютно все ветви программы не покроешь тестами,
руками не протестируешь, и т.п., у тебя вообще нет никаких
гарантий, что оно работает. Догадываешься куда это катится с
более-менее сложной программой ("с высокой цикломатической
сложностью") ? Любая, абсолютно глупая даже не ошибка, описка -- и
оно "компилируется". И работает, пока не зайдёт в проблемную ветку
кода. C++ по крайней мере даёт гарантию, что у тебя: 1) используются только известные компилятору идентификаторы, 2) что ты не будешь использовать несовместимые типы. Да, в C++ тоже любят утиную типизацию, но в C++ это всё происходит в момент компиляции, а не в момент работы. В питоне были какие-то подвижки в сторону типобезопасного программирования ( ), но по-моему там дело движется не очень.
https://www.python.org/dev/peps/pep-3107/
Хотя это вообще не про питон, а про динамически типизированные языки. Можно подумать, в perl сформулировать сложней. В perl возможностей даже больше, но почему его так не любят? Потому, что "эффект серебряной пули" в нём кончился в момент рассвета LAMP (где последняя буква был Perl, когда PHP ещё пешком под стол ходил).