How does the Python conditional operator workaround work? How does the Python conditional operator workaround work? python python

How does the Python conditional operator workaround work?


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.


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'


because True casts to 1 and False casts to 0 so if var = 70

("Working","Retired")[var>65]

becomes

("Working", "Retired")[1]

a nice little shortcut ... but I find it can be a little confusing with anything but a simple condition, so I would go with TM's suggestion

"Retired" if var > 65 else "Working"