General question about Python design goals

Christoph Zwerschke cito at online.de
Mon Nov 28 02:12:19 CET 2005


Sometimes I find myself stumbling over Python issues which have to do 
with what I perceive as a lack of orthogonality.

For instance, I just wanted to use the index() method on a tuple which 
does not work. It only works on lists and strings, for no obvious 
reason. Why not on all sequence types?

Or, another example, the index() method has start and end parameters for 
lists and strings. The count() method also has start and end parameters 
for strings. But it has no such parameters for lists. Why?

However when I ask such things I noticed I get answers like: "Is there a 
use case?" "You can do it some other way so it is not worth bothering."

Let me ask back: Do I really need to bother and justify it with a use 
case in a case where the language can be easily made more consistent or 
orthogonal without breaking anything?

What about design goals such as:

- orthogonality
- coherence, consistency
- principle of least astonishment ("Python fits my brain")
- simplicity ("kiss" principle)
- aesthetics, symmetry

Actually, which priority have the above design goals for Python? Are 
other design goals considered more important?

If I compare them with the "Zen of Python", I find some of the above:

consistency -> Special cases aren't special enough to break the rules
simplicity -> Simple is better than complex
aesthetics -> Beautiful is better than ugly

Actually, concerning the last two, you already need to understand the 
Zen of Python to decide if something is "simple" or even "beautiful", so 
they are not really suitable to *define* the Zen of Python. For me, a 
programming language is beautiful if it is orthogonal and coherent. But 
for others, this may be different. Somehow, I'm missing a direct 
allusion to the following in the Zen of Python:

- orthogonality
- principle of least astonishment

Maybe I am I lacking the satori of a real Python Zen master?

-- Christoph



More information about the Python-list mailing list