PEP 308 - suggestion for generalising the ternary operator

Bengt Richter bokr at
Wed Feb 12 22:46:21 CET 2003

On Wed, 12 Feb 2003 11:54:05 -0500, "Damien Morton" <newsgroups1 at> wrote:

>My use cases recast into the forms you counterproposed:
Grabbing the opportunity for comparison with my latest & greatest,
where {x} means "treat x as True in a logical expression, but don't
change the value." Thus the ternary is
    c and {x} or y
or optionally for style symmetry
    c and {x} or {y}

>First form:
>x = (y>0:sqrt(y), 0)
 x = y>0 and {sqrt(y)} or 0

>ext = (is_html(text):"html", "txt")
 ext = is_html(text) and {"html"} or "txt" # {} not really necessary, since "html" is guar True

>print "widget%s loaded" % (num>0:"s", "")
 print "widget%s loaded" % (num>0 and {"s"} or "") # {} not necessary

>ext = (is_html(bytes):"html", is_mpeg(bytes):"mpg", is_jpeg(bytes):"jpg", "txt")
 ext = is_html(bytes) and {"html"} or is_mpeg(bytes) and {"mpg"} or is_jpeg(bytes) and {"jpg"} or "txt"
 # none of the {} were really necessary in the above

>sign = (x<0:-1, x>0:1, 0)
 sign = x<0 and {-1} or x>0 and {1} or {0} # none of the {}'s really necessary

Just grabbing an opportunity for comparing ;-)

Bengt Richter

More information about the Python-list mailing list