Update to PEP308: if-then-else expression

Terry Reedy tjreedy at udel.edu
Tue Feb 11 14:16:04 EST 2003


"Rich Harkins" <rich at worldsinfinite.com> wrote in message
news:mailman.1044977078.10385.python-list at python.org...
> I posted this elsewhere under a different subject and got zero
responses
> of any type.  Perhaps if I post it to this thread I can get
indications
> of why this would be a bad idea (some slight revisions have been
made
> but the idea is the same):
>
>
> I suggest creating a new singleton called "Default" or some such
which
> has the following properties:
>
> 1) When used as the left-hand side of a logical "and", the right
hand
> side is not evaluated and the result is Default.
> 2) Always acts as a false in other boolean operations (such as
"or").
> 3) When used as a function: if the argument passed is non-zero
(True)
> then return the argument otherwise return the Default object.
> 4) Overload the keyword "else" (default OR) to act exactly as
> traditional "or" except that it will ONLY execute the right hand
side if
> the left hand side is Default (thus eliminating the false-left-side
> case).
>
> For example:
>
> Default(condition) and truecase else falsecase

It took me awhile to see that this actually works as desired.
Interesting.  I might actually like it better than the if-else
proposal.

Terry J. Reedy




> One could very well alias "Default" as "Test" if 7 letters is too
much
> typing (i.e.: Test(condition) and truecase else falsecase).
>
> By doing this truecase could produce any value and the falsecase is
> never executed.  In addition, truecase COULD produce Default
indicating
> that it the falsecase value is acceptible to the truecase after all.
As
> an added bonus, the following also makes sense:
>
> x=Default               # We don't care
> print "x is",x else 5   # 5 because x is Default.
> x=0
> print "x is now",x else 5 # 0 because x is not Default
>
> Obviously, the spellings would have to change as appropriate but you
get
> the idea.
>
> To sum up, why couldn't we create an entity such that it yields to
any
> other entity when manipulated?
>
> Here are the advantages I see to this:
>
> 1) No new keywords and only alters the meaning of one keyword.
> 2) Does not require trinary operation and looks like the classic
and-or
> pattern.
> 3) Visible enough to indicate something interesting is happening.
> 4) Creates a useful new value that can yield to any other value
> including false values (unlike None as it stands now).
> 5) Maintains short-circuiting properties.
>
>
> Anyway, since I didn't get a response to my previous posting I
thought
> I'd run it up the flagpole one more time and check to see if anyone
even
> reading it.
>
> Rich
>
>
>






More information about the Python-list mailing list