The challenge with anything like


result = default if bar is None else bar

or
result = bar if bar else default

or even

result = bar is None ? default : bar


is that sure default is only evaluated once - but in all cases 'bar' is evaluated twice, and if bar is a function call then no parser is clever enough to diagnose all possible side effects of calling bar() twice, or even detect that bar can be cached, so it will always be called twice.

In Python then a better way might be

result = temp := bar() if temp else default

This way only bar() and default are evaluated and invoked once.


------ Original Message ------
From: "Rob Cliffe via Python-ideas" <python-ideas@python.org>
To: "Dom Grigonis" <dom.grigo...@gmail.com>; "Jothir Adithyan" <adithyanjot...@gmail.com>
Cc: python-ideas@python.org
Sent: Monday, 17 Jul, 23 At 16:09
Subject: [Python-ideas] Re: Proposal for get_or function in Python dictionaries



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?
It does exactly the same as the C version and is more readable. Or am I missing something?
     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/ <https://mail.python.org/mailman3/lists/python-ideas.python.org/> Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/4QBAYBAT6EZFILNS2MCK3D6XW4LNRDZ5/ <https://mail.python.org/archives/list/python-ideas@python.org/message/4QBAYBAT6EZFILNS2MCK3D6XW4LNRDZ5/> Code of Conduct: http://python.org/psf/codeofconduct/ <http://python.org/psf/codeofconduct/>

-- <br>Anthony Flury<br>anthony.fl...@btinternet.com
_______________________________________________
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/552SFNHUTBOON7FHZQLSKKIQNO6ELEGS/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to