[Python-ideas] Reducing colon uses to increase readability
Andre Roberge
andre.roberge at gmail.com
Mon Jun 30 03:41:39 CEST 2008
Hi everyone,
In Python, the humble colon (:) has multiples uses:
1. as a signal to indentation increase, signaling a block of code, such as
1a) for function or class definitions
1b) for while/for/if/elif/else blocks
1c) for try/except/finally blocks
In these cases, the majority opinion (to which I subscribe) is that
using a colon increases readability. I am NOT suggesting to removing
the colon in those instances.
However, the colon has also some other uses.
2. in slices [a:b:c]
3. in dict assignments {a:b}
4. in lambda assignments (lambda x: x+1)
I would argue that, in these last three examples, there might be better choices.
(some of these choices have been inspired by reading
http://www.resolversystems.com/documentation/index.php/Differences_Between_Resolver_One%27s_Formula_Language_and_Python_Expressions)
I don't expect the following suggestions to immediately convince
everyone (or anyone!) ... but, at least they will be on record.
Slices:
---------
I would argue that, the usual slicing notation would be more readable
if it were as follows:
[a -> b; c]
Thus
[1:10:2] would become [1 -> 10; 2]
[1:10] would become [1 -> 10]
The "shorter" combinations would not gain in terms of readability;
they would be as follows:
[ :10 : 2] would become [10; 2]
[ :10] would become [10;]
[:: -1] would become [; -1]
[:] would become [;]
If such a change were to be made, an second slicing notation, *with a
different meaning*, could be introduced:
[a => b; c]
This would be an inclusive range, i.e.
[a => b] is equivalent to [a -> b+1]
dict assignments
------------------------
Here again, I would argue that using "->" instead of ":" would make
the code more readable - at least for beginners.
numbers = {'one' -> 1, 'two' -> 2} instead of
numbers = {'one': 1, 'two': 2}
lambda assignments
---------------------------
Once again, same choice.
lambda x -> x+1
is, I think, more readable than
lambda x: x+1
(but perhaps the last two [dicts and lambda] largely depends on the
font choice...)
======
Other considerations:
If "->" were to be adopted for dict or lambda assignments, then the
"naturalness" of their choice for slices would be reduced. An
alternative might be inspired from the mathematical notation
[a, ..., b; c]
I realize that this is "much" longer than [a: b: c].
Final comment:
I have seen other alternatives for simple slices suggested in the past such as
[a..b] and [a...b] which would be the equivalent of [a->b] and [a=>b];
however, the extra "." might sometimes be difficult to read, whereas
the difference between "->" and "=>" is much easier to see.
Cheers,
André
More information about the Python-ideas
mailing list