+1 vote
2 views
in Python by (26.5k points)

Can someone use other language constructs to stimulate a ternary operator if python doesn't have one. 

2 Answers

+3 votes
by (10.9k points)
edited by

@Ayush Yes, Ternary operator is available in Python from version 2.5. It’s a conditional operator which performs an operation based on a condition being true or false in a single line test instead of multiline if-else complexity. It has the lowest priority of all other python operators.

How did this work before the Python 2.5 version?

[expression] and [for_true] or [for_false]

As you asked when a ternary operator was not present in python before its 2.5 version then that will be checked by the interpreter, if the expression will be true then [for_true] evaluated otherwise [for_false] will be evaluated.

For an example -

x, y = 1,2
minimum = x < y and x or y
print(minimum)
Output: 1

If x is less than y then x will be assigned otherwise y will be assigned. Its main drawback is, this system became failed when x = 0 or false and then it will evaluate [for_false] always. This happens because in any case expression will get true and it will move for [for_true] and if it checks its value is 0 or false then it will also move towards [for_false] to print out the final result.

How this is working after python 2.5 version?.

Expression syntax-

[for_true] if [expression] else [for_false]

Methods to use-

1. Simple method

x, y = 1,2
minimum = x if x < y else y
print(minimum)
Output: 1

2. Direct method ( using tuples,dictionary,lambda)

x, y = 1, 2

print( (y, x) [x < y] )

print({True: x, False: y} [x < y])  

print((lambda: y, lambda: x)[y < x]())

Output:

1

 1

1

Hope you understand.

0 votes
ago by (46.1k points)

You can index into a tuple:

(falseValue, trueValue)[test]

test needs to return True or False.

It might be safer to always implement it as:

(falseValue, trueValue)[test == True]

or you can use the built-in bool() to assure a Boolean value:

(falseValue, trueValue)[bool(<expression>)]

...