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