Thanks, thats truly useful to keep in mind.
> On 20 Jul 2023, at 09:48, anthony.flury <anthony.fl...@btinternet.com> wrote: > > > 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 > <mailto:python-ideas@python.org>> > To: "Dom Grigonis" <dom.grigo...@gmail.com <mailto:dom.grigo...@gmail.com>>; > "Jothir Adithyan" <adithyanjot...@gmail.com <mailto:adithyanjot...@gmail.com>> > Cc: python-ideas@python.org <mailto: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 > <mailto:python-ideas@python.org> > > To unsubscribe send an email to python-ideas-le...@python.org > <mailto: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 > <mailto: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/PUKJNAGRRUGW3V4DUWNSQ3BZRLUJH5YT/ Code of Conduct: http://python.org/psf/codeofconduct/