Trinary operator?

Cliff Wells logiplexsoftware at earthlink.net
Fri Apr 19 14:25:53 EDT 2002


On Fri, 19 Apr 2002 13:44:46 -0400
Neal Norwitz wrote:

> import time
> gender = 'f'
> GENDER_DICT = {'m': 'male', 'f': 'female'}
> 
> t = time.time()
> for i in range(100000):
>     verboseGender = (gender == 'm') and 'male' or 'female'
> print time.time() - t
> 
> t = time.time()
> for i in range(100000):
>     verboseGender = {'m': 'male', 'f': 'female'}.get(gender, 'unknown')
> print time.time() - t
> 
> t = time.time()
> for i in range(100000):
>     verboseGender = GENDER_DICT.get(gender, 'unknown')
> print time.time() - t
> 
> t = time.time()
> for i in range(100000):
>     try: verboseGender = GENDER_DICT[gender]
>     except KeyError: verboseGender = 'unknown'
> print time.time() - t
> 
> 0.248443961143
> 0.696393966675
> 0.322777986526
> 0.239256024361

Interesting.  It hadn't occurred to me that exceptions would be any faster than
.get().  I didn't use a predefined dictionary since the OP was looking for an
equivalent to C's ternary operator (which I took to mean "one line"), but
that's clearly the most important optimization if speed is a concern (athough
it's arguably more readable as well).

-- 
Cliff Wells, Software Engineer
Logiplex Corporation (www.logiplex.net)
(503) 978-6726 x308  (800) 735-0555 x308





More information about the Python-list mailing list