在Python字符串中使用"and"和"or"运算符

rok*_*rok 24 python string boolean-operations

我不明白这条线的含义:

parameter and (" " + parameter) or ""
Run Code Online (Sandbox Code Playgroud)

其中parameter是string

为什么人们想要使用andor运算符,一般来说,使用python字符串?

Roh*_*ain 26

假设您正在使用值parameter,但如果值是None,那么您宁愿使用空字符串""而不是None.你一般会做什么?

if parameter:
    # use parameter (well your expression using `" " + parameter` in this case
else:
    # use ""
Run Code Online (Sandbox Code Playgroud)

这就是表达式正在做的事情.首先,你应该明白andor运营商的作用:

  • a and b返回b如果是True,否则返回a.
  • a or b返回a如果是True,否则返回b.

所以,你的表达:

parameter and (" " + parameter) or ""
Run Code Online (Sandbox Code Playgroud)

这实际上相当于:

(parameter and (" " + parameter)) or  ""
#    A1               A2               B
#           A                     or   B
Run Code Online (Sandbox Code Playgroud)

在以下情况下如何评估表达式:


作为一般建议,使用A if C else B表达式表达式更好,更可读.所以,你应该更好地使用:

" " + parameter if parameter else ""
Run Code Online (Sandbox Code Playgroud)

而不是给定的表达式.请参阅PEP 308 - 表达背后动机的条件if-else表达式.


小智 6

Python认为空字符串的布尔值为"false",非空字符串的布尔值为"true".

因此表达式只有两种可能的结果,即空字符串和非空字符串.

要注意的第二件事是返回"或"和"和"运算符的值.Python不返回true或false值,对于字符串和/或运算符,它返回一个字符串(考虑它们的值为true或false).Python使用惰性方法:

对于"and"运算符,如果left值为true,则检查并返回正确的值.如果left值为false,则返回

对于"或"运算符,如果第一个值为true,则返回它.否则,如果第二个值为false,则返回第二个值

parameter = 'test'
print( parameter and (" " + parameter) or "" )
Run Code Online (Sandbox Code Playgroud)

输出:测试

parameter = ''
print( parameter and (" " + parameter) or "" )
Run Code Online (Sandbox Code Playgroud)

输出:(空字符串)


Bar*_*zKP 5

Python 中的空字符串相当于False布尔值,与空列表相同。您提供的行是三元运算符的Python版本(如下面的评论中所述,现在是一个过时的结构,因为Python现在有一个真正的三元运算符)。它基于三个规则:

  • a and b: 如果aFalseb不会被评估
  • a or b: 如果aTrueb不会被评估
  • 逻辑子句的值是其最近计算的表达式的值

如果parameter计算子句True的第二部分,and则将计算:(" " + parameter)parameter因此,如果 a 不是空字符串,它将在 a 中添加前导空格。该or子句的第二部分不会被评估,因为您已经可以知道整个表达式是TrueTrue或“任何内容”总是True)。

如果parameterFalse(在此上下文中为空字符串),子句的第二部分and将不会被评估,正如您已经知道的那样FalseFalse并且任何内容都总是False)。因此,该or子句的第二部分被评估,返回一个空字符串。

您可以用更详细的方式编写它:

if parameter:
    return " " + parameter
else:
    return ""
Run Code Online (Sandbox Code Playgroud)