Python Ternary Operator Without else
Is it possible to do this on one line in Python?
if <condition>:
myList.append('myString')
I have tried the ternary operator:
myList.append('myString' if <condition>)
but my IDE (MyEclipse) didn't like it, without an else
.
Yes, you can do this:
<condition> and myList.append('myString')
If <condition>
is false, then short-circuiting will kick in and the right-hand side won't be evaluated. If <condition>
is true, then the right-hand side will be evaluated and the element will be appended.
I'll just point out that doing the above is quite non-pythonic, and it would probably be best to write this, regardless:
if <condition>: myList.append('myString')
Demonstration:
>>> myList = []
>>> False and myList.append('myString')
False
>>> myList
[]
>>> True and myList.append('myString')
>>> myList
['myString']
The reason the language doesn't allow you to use the syntax
variable = "something" if a_condition
without else
is that, in the case where a_condition == False
, variable
is suddenly unknown. Maybe it could default to None
, but Python requires that all variable assignments actually result in explicit assignments. This also applies to cases such as your function call, as the value passed to the function is evaluated just as the RHS of an assignment statement would be.
Similarly, all return
s must actually return, even if they are conditional return
s. Eg:
return variable if a_condition
is not allowed, but
return variable if a_condition else None
is allowed, since the second example is guaranteed to explicitly return something.
if <condition>: myList.append('myString')
Otherwise, no. Why the need to put it on one line?
Note that the "ternary operator" is an operator. Like any operator, it must return something, so how can you have a ternary operator without the else
clause? What is it supposed to return if the condition isn't true-like?