Allowing comments after the line continuation backslash

Roy Smith roy at panix.com
Tue Nov 2 07:46:23 EDT 2010


In article <mailman.469.1288654964.2218.python-list at python.org>,
 Chris Rebert <clp2 at rebertia.com> wrote:

> I find the level of deviation from PEP 8 in that file rather disturbing.
> In any case, the backslashes are easily avoided, and readability
> improved IMHO, via refactoring:
> 
> desc_attr_colors_triples = (("normal", "image", MainWindow.ColorsNormalList),
>     ("highlighted", "highlight", MainWindow.ColorsHighlightedList),
>     ("selected", "select", MainWindow.ColorsSelectedList))
> for in description, attr, color_list in desc_attr_colors_triples:
>     ...

I like and use PEP-8.  At the start of any project involving myself, 
other people, and Python, I'll generally suggest we follow PEP-8 style, 
and I can't remember ever getting any pushback.  That being said, I 
don't hold it in awe.  Likewise, I don't worry in the least about 
deviating when readability would be improved by doing so.

In this case, I think I would do:

styles = [("normal",      "image",     MainWindow.ColorsNormalList),
          ("highlighted", "highlight", MainWindow.ColorsHighlightedList),
          ("selected",    "select",    MainWindow.ColorsSelectedList)]

for in description, attr, color_list in styles:
   blah, blah, blah

For those reading this in a non-fixed width font, I've laid out the 
definition of styles as a table, with spaces inserted to make the 
columns line up.  For data like this, I think it makes it easier to read 
and comprehend.  As a minor nit, note that I made it a list of tuples, 
not a tuple of tuples.

I'm tempted to do an additional refactoring to get rid of the verbose 
color list names:

CL_Normal = MainWindow.ColorsNormalList)
CL_Highlighted = MainWindow.ColorsHighlightedList
CL_Selected = MainWindow.ColorsSelectedList

styles = [("normal",      "image",     CL_Normal),
          ("highlighted", "highlight", CL_Highlighted),
          ("selected",    "select",    CL_Selected)]

I haven't decided if this makes things better or worse.  For this small 
table, I'm inclined to say worse.  If the table were much larger and I 
were reusing many of the color list names over and over, I would 
certainly do that.  If MainWindow were a well-designed module and I 
could do

import * from MainWindow

without cluttering up my namespace too much, I would do that, then just 
use the unadorned names.

Also, depending on what I was doing inside the loop, I might pick 
shorter names.  For example:

for in d, a, c in styles:
   window.set_description(d)
   window.set_attribute(a)
   window.set_color_list(c)

is perfectly clear.  Normally, I don't use single-letter variable names, 
but in this particular case, the descriptive function names provide all 
the context that's need to explain what they are.



More information about the Python-list mailing list