On 14/02/2021 02:23, Christopher Barker wrote:
Thanks Rob.

You've broken a number of "rules" code code formatting there ;-)
Thanks for the quotation marks.  Indeed, PEP 8 provides guidelines, not diktats.
A big one is aligning things vertically, which, as a rule, I like. but this example does really push things out away from each other, so I'm not so sure.

I found that the original looked like heck when I first opened it in my editor -- once I made the window wide enough it was better, but still pretty stretched out.
It's written to suit my editor.  I'm with Brendan: restricting the whole world to 80 chars per line is like insisting the whole world program in COBOL.

Just for fun, here it is after being run through Black (which I don't usually use ....) -- but I think it looks better that way.

Also -- my first thought looking at that was that it could really benefit from the pattern matching :-)
Yes IMHO it would be a slight improvement.  But AFAIU pattern matching is not available yet.

And my second thought was that there could be a whole other pattern used here -- I usually find long chained elifs can be better expressed as a dict selection, or subclassing, or ...
I cannot imagine how a dictionary, much less a subclass (of what)?  could have any relevance here.  I'd be interested if you could elucidate.

But not seeing the rest of the application, maybe maybe not in this case.

if ch == "B":
    self.ToggleBackgroundColour(event)
elif ch == "C":
    self.ChangeCommonChars(event)
    return
elif ch == "D" and len(Areas) > 1:
    self.DeleteArea(event)
    return
elif ch == "F" and __debug__:
    self.Info(event)
    return
elif ch == "I":
    self.ChangeImagesToScroll(event)
    return
elif ch == "J" and self.NUMBER_OF_IMAGES == 1:
    self.ChangeJustification(event)
    return
elif ch == "L":
    self.ToggleShowLabels(event)
elif ch == "M" and MaxNumberOfImages > 1:
    self.ChangeNumberOfImages(event)
elif ch == "N" and CanZapImage:
    self.Rename(event)
elif ch == "R" and not (area.Dynamic | area.IsTour):
    self.ToggleRandom(event, 1)
elif ch == "S":
    self.ToggleSets(event, 1)
elif ch == "T":
    self.ChangeTimer(event)
    return
elif ch == "U" and not (area.Dynamic | area.Random):
    self.ToggleIsTour(event, 1)
elif ch == "V" and OnAnImage:
    self.WindowsPhotoViewer(event)
    return
elif ch == "W":
    self.ToggleWrap(event, 1)
elif ch == "Y" and not (area.Random | area.IsTour):
    self.ToggleDynamic(event, 1)
elif ch == "Z" and CanZapImage:
    self.Zap(event)
elif ch == "A" and not (area.Dynamic | area.IsTour):
    self.ToggleRandom(event, 1)
# Alt-R doesn't always work for some reason, so we give Alt-A as an alternative
else:
    event.Skip()

I'm well aware that if you apply PEP 8 guidelines strictly it would look like the above.  But is this supposed to be an improvement?  My original was a clear, tabular layout making the code structure completely clear, the vertical alignment highlighting where different cases are treated differently and where they are treated similarly.  This is just an amorphous mass of code that I find much harder to grok.  (YMMV but I find it hard to imagine.)
Rules are all very well, but "A Foolish Consistency is the Hobgoblin of Little Minds" [PEP 8]
Best wishes
Rob
PS Can anyone shed any light on why Alt-R doesn't always "work" on Windows 10?  I believe there's some bit of installed software that has hijacked it, but I'm not sure what.

 

On Fri, Feb 12, 2021 at 1:46 AM Rob Cliffe via Python-ideas <python-ideas@python.org> wrote:


On 08/02/2021 00:39, Brendan Barnwell wrote:
> On 2021-02-07 09:59, Christopher Barker wrote:
>> All that being said, it's not that big a deal, and I personally don't
>> try to limit to 80 chars per line anyway -- preferring 90 or 95 -- I
>> haven't used a VT100 in decades ....
>
>     To be honest I find it kind of ridiculous that people are still
> worrying about line lengths in this day and age.  It's especially
> strange that people will talk about how a proposed feature interacts
> with relatively sophisticated editor/IDE features like syntax
> highlighting and autocompletion, yet still have no problem working
> with editors that are woefully limited on a much more basic feature. 
> It's called line wrapping.
>
>     We as humans should not be concerned with how long LOGICAL lines
> are until and unless it actually impinges on our ability to comprehend
> them.  The appearance of the VISUAL line should not enter into our
> decision-making because that's a matter for the editor displaying the
> code.  There's no reason not have lines that are 200 or 300 or even
> 1000 characters long if you want to (for instance for a long string
> literal); it's the editor's job to take a semantically-motivated set
> of lines and indentations and display them attractively.  Then if
> different people have different preferences they can set their editors
> to different line widths and see the code in their preferred format. 
> Editors that don't support such features need to be fixed and we
> shouldn't continue to enable them by insisting that people distort the
> semantic structure of their code to fit arbitrary guidelines like 80
> or 95 characters.  A person should insert a line break whenever they
> think it's a good idea for semantic reasons (e.g., separating
> statements) and not insert any when they don't think so, and leave the
> rest up to the editor.
>
+1.
Keeping lines to 80 characters makes it easier to understand *individual
lines*.
But allowing fewer, longer lines makes it easier to perceive *the code
structure as a whole*.
I want to illustrate this with a bit of actual code from one of my
programs.  It uses lines up to 102 characters including 12-space
indentation.  Oh, and it breaks another Python shibboleth - not having
multiple statements on one line.  Apologies, it looks horrible in an
e-mail with the spacing all mucked up, so I have put it in an attachment
(a plain ASCII file).
IMHO this is a piece of well-written, self-documenting code that I would
find much harder to grok or look things up in if were laid out
differently.  YMMV .  In fact if it were laid out differently, I would
want to document it, and the documentation would be a table that looks
very much like the code "as is".

Rob Cliffe



_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-leave@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/JSCI223RQWSOABLTQ7OKEBQMOHJGUXBO/
Code of Conduct: http://python.org/psf/codeofconduct/


--
Christopher Barker, PhD (Chris)

Python Language Consulting
  - Teaching
  - Scientific Software Development
  - Desktop GUI and Web Development
  - wxPython, numpy, scipy, Cython