Ternary operator in python

By: Python Documentation Team Emailed: 1745 times Printed: 2432 times    

Latest comments
By: rohit kumar - how this program is work
By: Kirti - Hi..thx for the hadoop in
By: Spijker - I have altered the code a
By: ali mohammed - why we use the java in ne
By: ali mohammed - why we use the java in ne
By: mizhelle - when I exported the data
By: raul - no output as well, i'm ge
By: Rajesh - thanx very much...
By: Suindu De - Suppose we are executing

C language's ternary operator equivalent was added in Python 2.5. The syntax would be as follows:

[on_true] if [expression] else [on_false]

x, y = 50, 25

small = x if x < y else y
For versions previous to 2.5 there was no ternary operator in python.

In many cases you can mimic a ? b : c with a and b or c, but there's a flaw: if b is zero (or empty, or None – anything that tests false) then c will be selected instead. In many cases you can prove by looking at the code that this can't happen (e.g. because b is a constant or has a type that can never be false), but in general this can be a problem.

Tim Peters (who wishes it was Steve Majewski) suggested the following solution: (a and [b] or [c])[0]. Because [b] is a singleton list it is never false, so the wrong path is never taken; then applying [0] to the whole thing gets the b or c that you really wanted. Ugly, but it gets you there in the rare cases where it is really inconvenient to rewrite your code using 'if'.

The best course is usually to write a simple if...else statement. Another solution is to implement the ?: operator as a function:

def q(cond, on_true, on_false):
    if cond:
        if not isfunction(on_true):
            return on_true
        else:
            return on_true()
    else:
        if not isfunction(on_false):
            return on_false
        else:
            return on_false()

In most cases you'll pass b and c directly: q(a, b, c). To avoid evaluating b or c when they shouldn't be, encapsulate them within a lambda function, e.g.: q(a, lambda: b, lambda: c).

It has been asked why Python has no if-then-else expression. There are several answers: many languages do just fine without one; it can easily lead to less readable code; no sufficiently "Pythonic" syntax has been discovered; a search of the standard library found remarkably few places where using an if-then-else expression would make the code more understandable.


Python Home | All Python Tutorials | Latest Python Tutorials

Sponsored Links

If this tutorial doesn't answer your question, or you have a specific question, just ask an expert here. Post your question to get a direct answer.



Bookmark and Share

Comments(0)


Be the first one to add a comment

Your name (required):


Your email(required, will not be shown to the public):


Your sites URL (optional):


Your comments:



More Tutorials by Python Documentation Team
with in Python
goto in Python
Garbage Collection in Python
switch case statement in Python
Overloading in python
Static in python
Delegation in python
Schwartzian Transform in python
Multidimensional list (array) in python
Array in python
Remove duplicates from a list in python
Iterate over a sequence in reverse order in python
Convert between tuples and lists in python
Perl's chomp() equivalent for removing trailing newlines from strings in python
Convert number to string in python

More Tutorials in Python
What is the need for Python language?
How to compile python script and create .pyc file?
How to find the current module name in python
How to force rereading of a changed module in python
UnboundLocalError in python
call by reference in python
Callable objects in python
Ternary operator in python
Hexadecimal and Octal integers in python
Convert string to number in python
Convert number to string in python
Perl's chomp() equivalent for removing trailing newlines from strings in python
Convert between tuples and lists in python
Iterate over a sequence in reverse order in python
Remove duplicates from a list in python

More Latest News
Most Viewed Articles (in Python )
How to compile python script and create .pyc file?
switch case statement in Python
Installing gedit for python programming in Windows
Hexadecimal and Octal integers in python
Formatted printing in Python
Perl's chomp() equivalent for removing trailing newlines from strings in python
Convert between tuples and lists in python
Remove duplicates from a list in python
Static in python
Installing gedit for python programming in Linux
Comments And Pound Characters in Python
Strings And Text in Python
Printing in Python
What is the need for Python language?
How to find the current module name in python
Most Emailed Articles (in Python)
Hexadecimal and Octal integers in python
Iterate over a sequence in reverse order in python
Remove duplicates from a list in python
Installing gedit for python programming in Windows
Strings And Text in Python
Formatted printing in Python
What is the need for Python language?
How to find the current module name in python
How to force rereading of a changed module in python
UnboundLocalError in python
call by reference in python
Callable objects in python
Ternary operator in python
Convert string to number in python
Convert number to string in python