Readability counts, was Re: Use of Lists, Tupples, or Sets in IF statement.
Peter Otten
__peter__ at web.de
Tue Mar 15 13:34:48 EDT 2016
Rustom Mody wrote:
> On Tuesday, March 15, 2016 at 2:00:25 PM UTC+5:30, Peter Otten wrote:
>> Rustom Mody wrote:
>>
>> > Others have answered some parts
>> >>>> if x in x_list:
>> > ... print("That is a fruit.")
>> > ... else:
>> > ... print("That is not a fruit.")
>> > ...
>> >
>> > However one can distribute the print out of the if; Thus
>> >
>> >>>> "This is %s a fruit" % ("" if x in x_list else "not")
>>
>> Which of the two versions will most readers grasp at first sight?
>> Which one is easier to modify so that it works for arbitrary attributes?
>> Which one is easier to internationalize?
>
> I think you are saying that my (last) version is clever in a rather stupid
> sort of way. Yes?
Well, yes ;)
> Well if that is what someone recommends for serious programming then
> guilty as charged
>
> But there is a world of difference between
> - What one SHOULD (or not) do
> - What one CAN do
>
> The first is about serious|professional software engineering
> The second is about getting an education beyond basic to some more
> familiarity
>
> I assumed that OP is in the noob stage and was welcome some learning.
> So what I wanted to convey is not so much that such expressions are nice
> to have in serious code. Rather that
> 1. Like algebra has laws so does programming
> 2. That these laws can be used to massage one program into another
> 3. That expressions (like %-format) can occur elsewhere than in prints
That (the % part) is a lesson for C programmers rather than newbies ;)
> 4. That prints are usually unnecessary (and an abomination)
They aren't. They are often misused by beginners when they occur where a
function should return a value.
> Not that 3 and 4 come out so well as 1,2 in the above example.
>
> However to answer your questions specifically.
>
> Internationalization: Terrible
> Arbitrary attributes: not sure what you are referring to
> Readability: Very much like beauty -- in the eye of the beholder
> Some things are universally beautiful; some only in some cultural contexts
> Likewise readability
>
> Partly people find if-expressions unreadable because they are not used to
> them.
> This is backward because expressions are as basic than statements -- if
> anything more basic.
I think the problem is not that you prefer a programming paradigm that is
not Python's default -- it's that you crammed too many ideas into one
example. It's probably most helpful to concentrate on your main point, e. g.
(You can) Use an expression:
>>> x = "flying saucer"
>>> "This is a fruit" if x in x_list else "This is not a fruit"
'This is not a fruit'
> It is *symmetric* Unfortunately understood as lopsided
> More such symmetries in this table:
> http://blog.languager.org/2016/01/primacy.html#expstat
>
> Partly python if-expressions are unreadable because they are backward
> compared to if-statements. A minor syntactic nuisance but yes it does
> impact readability
Indeed. It's still better than
"This is %s a fruit" % (x in x_list and "" or "not")
The bug is intentional; the fix is of course
"This is %s a fruit" % (x in x_list and "most likely" or "probably not")
;)
More information about the Python-list
mailing list