Python seems remarkable in the sense that a typical python program is about 1/5 the length of a corresponding C program (even though C is normally thought of as pretty concise). The question is why.
My initial guess at the answer is: Python is a lot like (say) MODULA-3, provided somebody had already written about a million lines of "libraries" of handy subroutines for you. There is nothing inherently concise about python, it is just that you have all these libraries of common tasks so you do not have to code them, you can just use them.
Is that guess true?
That's part of it, but not all. Here are some other parts. Python's built-in data types are much richer than C's; there are variable-length arrays and dictionaries (= hash tables) and arbitrary-precision integers and so forth. Python has automatic memory management, so you can allocate things freely and never have to free them explicitly. This isn't just a matter of not having to call free(); a bigger deal is the fact that you don't have to worry about giving names to temporary objects so as to be able to dispose of them later. Python is dynamically typed, which saves the space that would have been taken up with type declarations and lets you (e.g.) put arbitrary objects into collections more easily. Python has enough operator overloading that you can (e.g.) make your own container types and index them using [] notation, make your own numeric-like types and do arithmetic on them with the usual arithmetic notation, etc. Python has a handful of particularly handy bits of syntax: a loop for iterating over an arbitrary sequence, comprehensions (which replace many simple iterative constructs with something much more concise), an infix operator for string formatting, etc. So, e.g., ", ".join("f(%s) = %s" % (x,f(x)) for x in range(5)) evaluates to a string like "f(0)=0, f(1)=1, f(2)=1, f(3)=2, f(4)=3" (the exact contends depending on what f is, of course). Most of the above (and hence much the same savings in space) goes equally for other languages with rich built-in types, automatic memory management, and dynamic typing. Smarter static typing (with type inference so that you don't have to put in all the types by hand as in C) is pretty effective, too. -- g