[Python-ideas] Making colons optional?

Steven D'Aprano steve at pearwood.info
Thu Feb 5 22:35:53 CET 2009

Riobard Zhan wrote:

>> Pascal uses colons, but not for the exact same purpose as Python. Both 
>> languages use colons in similar ways to it's use in English. In 
>> particular, Python uses colons as a break between clauses: larger than 
>> a comma, smaller than a period.
> Pascal is my first language. It has been some years ago, so I cannot 
> remember the detail now. I checked wikipedia and did not find colons are 
> used after if's. Not sure if you mean declarations?

I didn't say that Pascal uses colons after IFs. I explicitly said Pascal 
used colons "not for the exact same purpose as Python".

 > If so, I don't think
> that is what we are discussing here; Java and C also use colons in 
> switch/case statements. AFAIK, Python is quite unique in requiring 
> trailing colons after if's, for's, and function/class definitions.

A switch/case statement is equivalent to a series of if...elif... 
statements, so it would be inconsistent to require colons in a switch 
but not in if...elif.

My point was that both languages (Pascal and Python) use colons in a way 
which is very familiar and standard to the English language, albeit 
different usages in the two languages. If newbies to either language 
find colons confusing, that's indicative of the general decline of 
educational standards. If people whose first language is not English 
have trouble with colons, then I sympathize, but then so much of Python 
is based on English-like constructs that colons will be the least of 
their problem.

>>> - I find colons pretty annoying.
>> ...
>> I'm sorry you dislike colons, but I like them.
> Yes I agree with you that many people like colons. What bothers me is 
> that some people dislike them, but not given the choice to avoid them. 
> We don't like semicolons in Python, but what would stop a hard-core C 
> users to end every statement with a semicolon?

Peer pressure. Everybody would laugh at their code and think they're 

> And I would also argue that many of those like colons not because they 
> really feel colons improve readability, but that they have get used to 
> colons in the first place. You like colons, I don't. How do you know 
> another Python user will like them or not? 

I don't really care. I'm sure that there are millions of programmers who 
don't like brackets around function calls, but we don't make them optional:

     myfunction x, y, z

For that matter, commas in lists and tuples:

     my function x y z

Flexibility of punctuation in human languages is a good thing, because 
it enables the writer to express subtle differences in semantics. There 
is a subtle difference between

Guido is an excellent language designer: he knows what he is doing.


Guido is an excellent language designer, he knows what he is doing.

But compared to human languages, the semantics expressed by computer 
languages are simple and unsubtle. Flexibility of punctuation hurts 
computer languages, not helps.

> By making trailing colons 
> OPTIONAL, we can probably have the chance to field test. If people 
> really think colons improve readability that much, they can still use 
> them, just like we feel semicolons are line noise and void them if 
> possible, even though we CAN use them. I don't think we will ever lose 
> anything to make colons optional.

Of course we do. It makes the language bigger and more complex. The 
parser has to be more complex. Who is going to write that, maintain 
that? Every time you write a def block you have to decide "colon or 
not?". Most people will standardize on one or the other, and the 
decision will go away, but they will still need to read other people's 
code, and then colon-haters will be unhappy, because they have to read 
other people's code containing colons, while colon-likers will be 
unhappy, because they have to read other people's code missing colons.

Optional colons are the worst of both worlds, because it makes 
*everybody* unhappy.


More information about the Python-ideas mailing list