[Python-ideas] Making colons optional?
yaogzhan at gmail.com
Sun Feb 8 07:47:03 CET 2009
On 6-Feb-09, at 12:51 PM, Stephen J. Turnbull wrote:
> The inconsistency is quite small. In fact, in English colons and
> semicolons have both different syntax and different semantics, and the
> same is true of Python. In English, the semicolon expresses a
> conjunction of two not necessarily related sentences. Python is the
> same, except that since we all run von Neumann machines, conjunction
> implies sequencing. The colon, on the other hand, represents a
> relationship of some kind. A native-speaker simply doesn't write
> things like "The sky is blue: mesons are composed of two quarks."
> (Well, the coiner of the work "quark" might, which is the exception
> that proves the rule.) And the same is true in Python; the code
> fragment preceding the colon controls the statement (suite) following
> it. Thus, the apparent isomorphism of the semantics is quite
> superficial, almost syntactic itself.
> Syntactically, in English a semicolon takes two sentences to conjoin.
> A colon, on the other hand, must have a full sentence on one side or
> the other, but the other side may be almost anything. Similarly in
> Python: both what precedes the semicolon and what follows it must be
> complete statements, while what precedes the colon must be a fragment,
> and what follows it is a complete statement (suite). So the colon and
> semicolon do not have isomorphic syntax, either.
> In fact, the semicolon is indeed redundant, as it is precisely
> equivalent to a newline + the current level of indentation. This kind
> of redundancy is quite unusual in Python, so I wonder if the BDFL
> might regret having permitted semicolons at all, as he has expressed
> regret for allowing the extended assignment operators (eg, +=).
I have no problem with the different semantics of colons and
semicolons. What I do have problem is that colons are mandatory but
semicolons are optional, while both are completely redundant. Colons
are redundant too because they are precisely equivalent to a newline +
a deeper level of indentation.
> In colon-less Python, the control fragment is insufficiently divided
> from the controlled suite. Just as in English, a bit of redundancy to
> reflect the hierarchical relationship between the control structure
> and the controlled suite is useful.
I think indentation is sufficient to divide them. A block indented one
level deeper is always associated with the previous one level
shallower code. We even indent line continuation to reflect such
> In Python, the same character is used, which is helpful to those whose
> native languages use colons. This is indeed *good* design. It
> expresses, and emphasizes, the hierarchical structure of the control
> construct, and does so using a syntax that any English-speaker (at
> least) will recognize as analogous.
The hierarchical structure is expressed by indentation. Colons simply
(over)emphasize it. That's why I think they are redundant. Choosing
the colon character is fine. Making it mandatory is bad.
> I don't expect to convince you that the required colon is good design,
> but I think it puts paid to the notion that colons and semicolons are
> isomorphic. It is not true that what we conclude about semicolons is
> necessarily what we should conclude about colons.
Forgive me if I do not fully understand your point, but it appears to
me that you conclude semicolons are optional because they are
redundant. I think the conclusion is precisely the same for colons.
More information about the Python-ideas