Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using "and" and "or" operator with Python strings [duplicate]

I don't understand the meaning of the line:

parameter and (" " + parameter) or "" 

where parameter is string

Why would one want to use and and or operator, in general, with python strings?

like image 275
rok Avatar asked Oct 06 '13 20:10

rok


People also ask

How and * operators work with strings?

The * operator can be used to repeat the string for a given number of times. Writing two string literals together also concatenates them like + operator. If we want to concatenate strings in different lines, we can use parentheses.

Can you use logical operators with strings?

Python logical operator “and” and “or” can be applied on strings. An empty string returns a Boolean value of False.

Can you use if and/or together in Python?

Complex conditions in Python's if statements: and + or. To handle complex scenarios, our if statement can combine the and and or operators together. That way we turn several conditions into code, of which some have to happen simultaneously ( and ) while others need just one to be True ( or ).


1 Answers

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.

like image 142
Rohit Jain Avatar answered Oct 04 '22 05:10

Rohit Jain