Ternary Operator in Python?

PythonServer Side ProgrammingProgramming

Many programming languages support ternary operator, which basically define a conditional expression.

Similarly the ternary operator in python is used to return a value based on the result of a binary condition. It takes binary value(condition) as an input, so it looks similar to an “if-else” condition block. However, it also returns a value so behaving similar to a function.

Syntax

[on_true] if [expression] else [on_false]

Let’s write one simple program, which compare two integers -

a. Using python if-else statement -

>>> x, y = 5, 6
>>> if x>y:
   print("x")
else:
   print("y")
y

b. Using ternary operator

>>> x, y = 5, 6
>>> print("x" if x> y else "y")
y

With ternary operator, we are able to write code in one line. So python basically first evaluates the condition, if true – evaluate the first expression else evaluates the second condition.

>>> def find_max(a,b):
return a if (a>b) else b
>>> find_max(5, 6)
6

Way to implement Ternary Operator

Below are different ways to implement ternary operator.

a. Using Python Tuples

>>> a, b = random(), random()
>>> (b, a) [a>b]
0.5497848117028667

Above is equivalent to -

>>> (b, a) [True]
0.5065247098746795

But if you are confused with value returned is of ‘a’ or ‘b’. Let’ rewrite above code.

>>> (f"b:{b}", f"a:{a}") [a>b]
'b:0.5497848117028667'

b. Using Python dictionaries

>>> a, b = random(), random()
>>> {False: f"b:{b}", True: f"a:{a}"}[a>b]
'a:0.8089581560973976'

We can interchange the key-value pair -

>>> {True: f"a:{a}", False: f"b:{b}"}[a>b]
'a:0.8089581560973976'

c. Using Lambdas

We can use python lambda function to act as a ternary operator -

>>> (lambda: f"a:{a}", lambda: f"b:{b}")[a>b]()
'b:0.6780078581465793'

Nested Python ternary operator

Let’s try chaining these operators -

>>> from random import random
>>> x = random()
>>> "Less than zero" if x<0 else "between 0 and 5" if a>=0 and a<=5 else "Greather than five"

Output

'between 0 and 5'

Let’s check the actual value of x -

>>> x
0.08009251123993566
raja
Published on 30-Apr-2019 12:21:31
Advertisements