After writting the article Why Java rocks, I have no other option than writting why Python rocks.
Before starting, I might advise you that Python is my favourite language. And this is like search your best friends defects.
Opposite to people's opinion, Python is strongly typed. But it is dynamically typed also. You cannot modify the type of a variable, but you can reuse the same variable to point to... another thing.
In addition, it follows the duck typing principle: "If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck". This simplifies the inheritance management, because it is not necessary to inherit from anything. If only it has the required methods implemented, then it matches the interface. That's all.
Objects are first class citizens
What means that any object can be used as a parameter of any method.
Everything is an object
Whatever: basic types, a method, a class... Everything is an object. If you mix this with the previous feature, everything can be used as a parameter of a function. Or can be stored in a variable, an array, a hash, ...
Hashes and arrays are built-ins
You can instanciate a hash or an array directly, without any reserved words or difficult API structures.
Standard Python has everything you can need, since command line managers to web servers, passing over threads management, configuration files management, XML readers, other language parsers, TK graphical interfaces,... whatever you want.
Command line interpreter
Zip support built-in
Zip support is native. You can store anything in a zip and try to execute it with python, and it will look for the file __main__.py.
As far as it is strongly indented, document indentation should be perfectly readable.
Expected and homogeneous
When you are a newbie in the language and you learn the basic functionality, whatever you want to do you know how. This is because it is homogeneous, and everything is executed in the most expected way.
Usually there is only a right way to do things. If you try another way, it would be more hard (until you realize of it).
From its base. And there are a load of platforms to develop for the web.
Forgive getters/setters. That is not pythonic. In python we use public vars. If you want to modify its usage afterwards, it is enough to upgrade them to properties, but its external usage will be the same.
Everything is public. The only private things are by convention, so they are accesible too.
Whatever you want to do is small. Since the own compiler and interpreter that requires about 20 Mb. Everything is easy with Python.
Speedy. So in its execution as in its development.
Python do not rocks
Global Interpreter Lock (GIL)
It is a mutex that avoids that several Python threads may be executed simultaneously. This can cause horrible performance problems and, what is more, it cannot take advantage of all system resources: multiprocess systems are strongly limited.
Despite all Python advantages, the package system is depresing: easy_install is not so "easy", and there are problems to retrieve a fixed version of a package. There are some more problems, but I think that it is enough with what I said.
Update: now we have pip that seems to be easy to use and looks like the standard package management system.
The hateful self var
Usually it is hateful to explicitly pass the self variable as first parameter for every method. But this feature allows you to use several oparations that are uglier in other languages or, they cannot be used at all.
A lot of people finds the strongly type as a problems. It is a mixed bag for me. Globally I like it, but I have to admit that it is a disadvantage some times.
There is no IDE
It is quite difficult to build an IDE for a language which can modify its methods in run time. But there are some of them good enough. Despite of them, I use my lovely Emacs.
Good for scripts but nothing more
Somple people argue that, but I do not think so. I think that BitBucket is made with Python, and Google uses it too.
Along it is not typed, it is impossible to manage method overload. But it has an easy default valuated system for parameters that is versatile enouth.
There are a lot of reasons to use Python and very few to not doing it. It is so beautiful!