On Tue, 18 Jul 2023 at 10:37, Dom Grigonis <dom.grigonis@gmail.com> wrote:
As opposed to
if a == 0: foo, bar = var1, variable2 else: foo, bar = default, default2
Again, one is `a == 0`, another is `b == 0`. I didn’t do a good job conveying this did I… Will try to be more precise and leave less room for misinterpretation.
Would you really go through and change all your variable names if it turns out that what you actually need is "a == 0" and "b == 15"? This sort of alignment is so fragile and unnecessary. Yes, it's nice when it works out, but it should never be a high priority.
foo = foo3 if foo2 == 0 else default bar = barbarbar if bar2 == 0 else default2
# As opposed to
foo = foo2 == 0 ? foo3 : default bar = bar2 == 0 ? barbarbar : default2
Extremely artificial. You've shown that, if the conditions are the same lengths but the "if-true" expressions aren't, you can align them using ?: and can't align them using if-else. It's just as valid to show: foo = "yes" if foo2 else "no" bar = "yes" if barbarbar else "no" Like I said, extremely fragile.
I don’t think it is that easy to draw the line here. Everything in both of those PEPs can be expressed using current constructs. So maybe they are about more compact expressions?
"Can be expressed"? Well, yes. Python is Turing-complete. So is Brainf*. Doesn't mean we want to use it though. Expressiveness is a spectrum or a scale. You can improve on it without the older version being impossible to write. In fact, Python really doesn't NEED all the syntax it has. Have a read of this series of blog posts: https://snarky.ca/tag/syntactic-sugar/ (Brett Cannon also did a talk on this at PyCon US 2023; not sure if that's been made public yet.) There are only a handful of pieces of syntax that you really can't do without. But you CAN skip having an "if" statement. No kidding - you can eliminate the if statement by smart use of the while statement. https://snarky.ca/unravelling-if-statements/ Improvements to expressiveness allow us to write better code, to make it clearer what the *programmer's intent* is. Sometimes that aligns with compactness; sometimes it doesn't.
Was python made for conciseness or expressiveness? Everything it does can already be done in C isn’t it? So I would argue any abstraction is really more about conciseness. Expressiveness is more about incorporation of what is already there, but not in the abstraction, i.e. extension. But python being interpreted language written in another language, I really FAIL to see how is all of this NOT about conciseness and modularity?
Expressiveness. It's about how well the source code represents the programmer's intent. You could write all of your code as a massive matrix of logic gates, but that wouldn't improve readability. And since you can implement logic gates with water - see https://www.youtube.com/watch?v=IxXaizglscw for proof - your program source code could be an acrylic sheet with a bunch of buckets glued onto it. But none of us want to write code like that, and definitely none of us want to read code like that. ChrisA