Suppose you are using the value of parameter
, but if the value is say None
, then you would rather like to have an empty string ""
instead of None
. What would you do in general?
if parameter:
# use parameter (well your expression using `" " + parameter` in this case
else:
# use ""
This is what that expression is doing. First you should understand what and
and or
operator does:
a and b
returns b
if a is True
, else returns a
.
a or b
returns a
if a is True
, else returns b
.
So, your expression:
parameter and (" " + parameter) or ""
which is effectively equivalent to:
(parameter and (" " + parameter)) or ""
# A1 A2 B
# A or B
How the expression is evaluated if:
parameter - A1
is evaluated to True
:
result = (True and " " + parameter) or ""
result = (" " + parameter) or ""
result = " " + parameter
parameter - A1
is None
:
result = (None and " " + parameter) or ""
result = None or ""
result = ""
As a general suggestion, it's better and more readable to use A if C else B
form expression for conditional expression. So, you should better use:
" " + parameter if parameter else ""
instead of the given expression. See PEP 308 - Conditional Expression for motivation behind the if-else
expression.