tags:

views:

171

answers:

2

Hi All

do you know if Python supports some keyword or expression like in C++ to return values based on if condition, all in the same line (The C++ if expressed with the question mark ?)

// C++
value = ( a > 10 ? b : c )
+16  A: 

From Python 2.5 onwards you can do:

value = b if a > 10 else c

Previously you would have to do something like the following, although the semantics isn't identical as the short circuiting effect is lost:

value = [c, b][a > 10]

There's also another hack using 'and ... or' but it's best to not use it as it has an undesirable behaviour in some situations that can lead to a hard to find bug. I won't even write the hack here as I think it's best not to use it, but you can read about it on Wikipedia if you want.

Mark Byers
I've always wondered what notation they rejected as "too confusing" in favour of this.
anon
Thanks for your time!That's cool!
Abruzzo Forte e Gentile
+1, You can use this kind of 'if' even with lambda expressions!
Serge
@Neil, not sure if you're referring to the syntax ultimately chosen, or who said "too confusing", but the PEP summarizes all the rejected alternatives among other info: http://www.python.org/dev/peps/pep-0308/
Peter Hansen
+3  A: 

simple is the best and works in every version.

   if a>10: 
       value="b"
   else: 
       value="c"
Hi, thanks for your time!
Abruzzo Forte e Gentile