> It does exactly the same as the C version and is more readable.  Or am I 
> missing something?

My point is exactly that it is not easily readable compared to C version. Also, 
unnecessarily verbose. The order of components is rather awkward.

I came to this, because people seem to want one-liners for certain things and 
what I came up with is that maybe more concise if-else expression could help.

# Fairly reasonable case.

def foo(a: bool, c: float, d: float)
    val = a ? (c ? c : d) : (d ? d : c)
    return val

# Comapred to
def bar(a: bool, c: float, d: float)
    val = (c if c else d) if a else (d if d else c)
    return val

Maybe for someone who majored in languages python’s if-else is more easily 
understood. To me, personally, 2nd one is unbearable, while 1st one is fairly 
pleasant and satisfying.

This whole thing started from dict’s `get` extension:
def get_substitute(self, key, default=None, subs=()):
    return key in self ? (self[key] := val in subs ? subs[val] : val) : default
I dare you to do a 1-liner with current if-else.

Also, https://peps.python.org/pep-0505/ <https://peps.python.org/pep-0505/>
Why was it even considered if it doesn’t introduce any new functionality? I 
also dare you go through that PEP’s examples and re-write them with current 
if-else expression.


So maybe, just maybe, making already existing expression more readable can also 
be a valid suggestion?

As I said, in my opinion it would solve many existing queries and requests, 
just because certain things would become very pleasant and obvious how to do in 
simple one-liners.

Simpler and more logically convenient if-else combined with other elegant 
python expressions would potentially fill that gap.

From where I currently stand it just seems fairly happy middle solution 
between: very concise narrow functionality requests and very verbose ways of 
how they need to be done at the moment.

I fully appreciate how likely what I am proposing is going to be even 
considered. But I really think it should be.




> On 17 Jul 2023, at 18:09, Rob Cliffe <rob.cli...@btinternet.com> wrote:
> 
> 
> 
> On 15/07/2023 21:08, Dom Grigonis wrote:
>> Just to add. I haven’t thought about evaluation. Thus, to prevent evaluation 
>> of unnecessary code, introduction of C-style expression is needed anyways:
>>> 1. result = bar is None ? default : bar
>> 
>> The below would have to evaluate all arguments, thus not achieving benefits 
>> of PEP505.
>>> 2. result = ifelse(bar is None, default, bar)
>> 
>> 
>> So I would vote for something similar to:
>>> result = bar is None ? default : bar
>> 
>> 
>> Where default and bar is only evaluated if needed. Although not to the 
>> extent as initially intended, it would offer satisfiable solutions to 
>> several proposals.
>> 
> Well, default is only evaluated if needed; bar is always evaluated.
> What is wrong with the Python equivalent
> 
> result = default if bar is None else bar
> or if you prefer
> result = bar if bar is not None else default
> 
> Perhaps you didn't know about this construction?


> Best wishes
> Rob Cliffe

_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@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/Q4HZ5ME6V473L25AV33BA6C7JMXTI2PJ/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to