Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does the Python conditional operator workaround work?

Tags:

From what I have read, I found that a built-in ternary operator does not exist (I will be happy to know more about it.).

I found the following code as a substitute:

def val():     var = float(raw_input("Age:"))     status = ("Working","Retired")[var>65]     print "You should be:",status 

I couldn't understand how this code works; can anyone explain me how actually the code is working? I am also interested to know why the ternary operator doesn't exist; any references or links about this will be ore useful.

I'm running Python 2.6.4 on Windows Vista.

like image 779
Chaitanya Avatar asked Dec 22 '09 15:12

Chaitanya


People also ask

How does a conditional operator work?

The conditional operator works as follows: The first operand is implicitly converted to bool . It is evaluated and all side effects are completed before continuing. If the first operand evaluates to true (1), the second operand is evaluated.

What is conditional operator in Python?

Conditional Expressions (Python's Ternary Operator) Python supports one additional decision-making entity called a conditional expression. (It is also referred to as a conditional operator or ternary operator in various places in the Python documentation.)

Why conditional operator is called ternary operator in Python?

The ternary operator is a way of writing conditional statements in Python. As the name ternary suggests, this Python operator consists of three operands. The ternary operator can be thought of as a simplified, one-line version of the if-else statement to test a condition.

How ternary operator works in Python?

Practical Data Science using Python 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.


2 Answers

Python has a construct that is sort of like the ternary operator in C, et al. It works something like this:

my_var = "Retired" if age > 65 else "Working" 

and is equivalent to this C code:

my_var = age > 65 ? "Retired" : "Working"; 

As for how the code you posted works, let's step through it:

("Working","Retired") 

creates a 2-tuple (an immutable list) with the element "Working" at index 0, and "Retired" at index 1.

var>65 

returns True if var is greater than 65, False if not. When applied to an index, it is converted into 1 (True) or 0 (False). Thus, this boolean value provides an index into the tuple created on the same line.

Why hasn't Python always had a ternary operator? The simple answer is that Guido van Rossum, the author of Python, didn't like/didn't want it, apparently believing that it was an unnecessary construct that could lead to confusing code (and anyone who's seen massively-nested ternary operators in C can probably agree). But for Python 2.5, he relented and added the grammar seen above.

like image 176
mipadi Avatar answered Sep 24 '22 08:09

mipadi


Python (2.5 and above) does indeed have a syntax for what you are looking for:

x = foo if condition else bar 

If condition is True, x will be set to foo, otherwise it will be set to bar.

Examples:

>>> age = 68 >>> x = 'Retired' if age > 65 else 'Working' >>> x 'Retired' >>> age = 35 >>> y = 'Retired' if age > 65 else 'Working' >>> y 'Working' 
like image 26
TM. Avatar answered Sep 25 '22 08:09

TM.