On 11/12/19 1:07 AM, Daniel Haude wrote:
Hello Neil,
thanks for the detailed answer.

Question: are there other people/factors who/which should be regarded
as more important than the linter's opinion?
Yes. Mine.

Um, see below...
(unless humor)


I was just puzzled at the linter's output (took me a while to figure out what it actually meant), and that got me started on the track if there was maybe a more Pythonic way of dealing with that decision chain.
...

One reason why this code looks a bit strange (and possibly why PyLint
reacts?) is because it is trivial. When we look at the overall
picture, the question becomes: what will the 'mainline' do with
"result" (the returned value)? Immediately one suspects it will be fed
into another decision, eg:

No, the "result" is a text message that actually means something and is eventually output for human consumption.

The whole thing is rather academic. Also my efficiency argument doesn't hold water because this routine is executed just a few times per hour. I like the "condition table" approach for its lower line count but I'll stick with if/elif because it's more conventional and therefore easier to understand for the casual reader.

+1 (except that it's your future-self or another maintainer who is important rather than anyone 'casual')


A reason we are having difficulty making suggestions is because the example has been abstracted. Thus we had no idea that the objective was to (possibly) output to SMS, nor more importantly, the meanings of a, b, and z. (it's all algebra to me!)

In some/another application you may like to consider constructing the source-data for this decision within a class. Then the conditions can become methods or even properties of the class - remembering that a property could be some combination of attributes, eg a > 4 and b == 0. Alternatively, the class could maintain some idea of 'status', where "first" corresponds to the preceding 'state', "second" when len(z) falls below 2, etc. The class's property/ies thus simplify the SMS-transmission process/class...

Appropriate name-choices will make the code self-documenting - per the 'reading' objective:

        if employee.worked_overtime:
                sms.send( "We're in the money...!" )

--
Regards =dn
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to