Alternative suggestion for conditional expressions (see PEP 308)

Phil Frost indigo at
Thu Jul 15 22:06:58 CEST 2004

On Thu, Jul 15, 2004 at 12:17:08PM -0700, Jeff Shannon wrote:
> Larry Bates wrote:
> >Seems that every one of the examples can be done
> >with a dictionary.
> While that may be true of the examples given here, it's not true of all 
> cases.  The one possible real advantage of a conditional expression, as 
> I see it, is shortcutting.  In cases where the conditionally-executed 
> code has side effects, it can be important to ensure that *only* one 
> branch is evaluated; creating an actual dictionary (whether permanent or 
> temporary) will execute *all* branches.  For example, using neblackcat's 
> proposed syntax (even though I'm *not* fond of it):
> nextline = ?(FileOne.readline(), FileTwo.readline())[whichfile]
> ...

Evaluation of the expressions could be deferred by using callables, like

next = (lambda: fileone.readline(), lambda filetwo.readline())[which]()

Or since in this example both sides of the tuple are already callables:

next = (fileone.readline, filetwo.readline)[which]()

But then really, is writing:

if which: next=fileone.readline()
else: next=filetwo.readline()

all that bad?

More information about the Python-list mailing list