Python also allows for overriding of functions and variables at multiple levels (local, instance, class, superclass...) dynamically. This makes Python a great glue language as well as a dynamic object language like LPC used in MUDs.

In general, folks who hate Python despise the whitespace thing, but once you get over it, you realize it does make it infinitely easier to read other people's code. There have been several suggestions to imitate braced block structures on the Python site.

I use Python for everything except when I need to do a lot of string-munging or I need to run the script/program as setuid root (for which Perl is the ultimate programming language). The Perl interpreter will allow the script to run as the root user, where the Python interpreter won't. In order to build Python scripts to run as root for every user, you have to build a shim in some other language (such as C) that does the switch to root and then calls the Python script. Also, writing Python extensions is a pain in the ass.