Been doing a lot of coding in python lately. While some of the hackability of the language is nice for doing some cool things, overall, I cant say im a fan. Its a little too obscured for writing algorithms where effiency is important. Its hard to tell what data types are truly backing various variables and thus makes it tricky to pick the right implementation. I think im working with raw arrays and they turn out to be linked lists or worse. Even then things like a "Dict" isnt always clear if its a Tree implementation or a hashmap implementation or something else entirely.
Granted this isnt an impossible task, I have managed to figure it out by pulling open the source code of the libraries I call and using profiling tools. But python seems to not care or obscures a lot of that.
@timorl I would imagine you dont like any dynamically typed languages then or at the very least weakly typed languages... I can stand dynamic typing but only if its strongly typed... weak and dynamically typed I have the same complaint you do, its hard to know what and if a variable can do what you want. I mean sure yo ucan test for the methods and arguments, and in python you can even check what type an instance is technically, but its very convoluted.
Generally the advice in python is to just assume the type passed in is the type expected and let the exceptions do the rest. But while that works to a point it makes debugging a PITA.