Trailing comma (was: Re: structure in Python)

Skip Montanaro skip at pobox.com
Tue Oct 21 11:38:42 EDT 2003


 
    Cousin>   I don't understand how an extra comma at the end of a sequence
    Cousin>   is supposed to help with problems like this where a sequence
    Cousin>   delimeter, the comma, has been ommitted in the middle of the
    Cousin>   sequence ....

Today, I write:

    weekdays = [
                "Monday",
                "Tuesday",
                "Wednesday",
                "Thursday",
                "Friday",
                "Saturday"
               ]

An astute reader points out that I forgot Sunday, so I add a line:

    weekdays = [
                "Monday",
                "Tuesday",
                "Wednesday",
                "Thursday",
                "Friday",
                "Saturday"
                "Sunday"
               ]

The problem can occur in other ways as well.  Suppose you've painfully
constructed a long list (dozens? hundreds?) of string constants (and you're
not smart enough to realize you should initialize the list from a data file)
then decide it would be easier to maintain that growing list if you kept it
sorted.

    weekdays = [
                "Monday",
                "Tuesday",
                "Wednesday",
                "Thursday",
                "Friday",
                "Saturday",
                "Sunday"
               ]

becomes

    weekdays = [
                "Friday",
                "Saturday",
                "Sunday"
                "Thursday",
                "Wednesday",
                "Monday",
                "Tuesday",
               ]

after selecting the rows containing weekdays in Emacs and typing

    C-u ESC | sort RET

Allowing and using a trailing comma prevents those sort of subtle mistakes.

    Cousin>   I am, of course, grateful to the original coder for saving me
    Cousin>   the 42e-19 ergs of energy required to press the comma key in
    Cousin>   cases where I would further extend the sequence at its end,
    Cousin>   but personally find this style convention U G L Y and a
    Cousin>   possible source of confusion ....

Practicality beats purity.  If it's a constant list which you are certain
you will never extend or reorder, feel free to omit that last comma.  Also,
if the list is not a list of string constants there's no real harm in
omitting it either, because if you extend or reorder the list and forget to
insert a comma in the right place you'll get a SyntaxError the next time you
import that module.  The only case where it's problematic is for lists of
string constants where "abc" "def" is valid syntax.  In this case the Python
bytecode compiler can't help you.

    Cousin>   This probably stems from the fact that my elementary school
    Cousin>   grammar teacher would whack me severely about the head and
    Cousin>   shoulders if I wrote ....

    Cousin>      Uncle Scrooge took Huey, Duey, and Louie, 
    Cousin>      to the park. 

Perhaps, but your Python teacher would have praised you. ;-)

Skip





More information about the Python-list mailing list