rok*_*rok 24 python string boolean-operations
我不明白这条线的含义:
parameter and (" " + parameter) or ""
Run Code Online (Sandbox Code Playgroud)
其中parameter是string
为什么人们想要使用and和or运算符,一般来说,使用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)
这就是表达式正在做的事情.首先,你应该明白and与or运营商的作用:
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)
在以下情况下如何评估表达式:
parameter - A1被评估为True:
result = (True and " " + parameter) or ""
result = (" " + parameter) or ""
result = " " + parameter
Run Code Online (Sandbox Code Playgroud)parameter - A1是None:
result = (None and " " + parameter) or ""
result = None or ""
result = ""
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)
输出:(空字符串)
Python 中的空字符串相当于False布尔值,与空列表相同。您提供的行是三元运算符的Python版本(如下面的评论中所述,现在是一个过时的结构,因为Python现在有一个真正的三元运算符)。它基于三个规则:
a and b: 如果a是False则b不会被评估a or b: 如果a是True则b不会被评估如果parameter计算子句True的第二部分,and则将计算:(" " + parameter)。parameter因此,如果 a 不是空字符串,它将在 a 中添加前导空格。该or子句的第二部分不会被评估,因为您已经可以知道整个表达式是True(True或“任何内容”总是True)。
如果parameter是False(在此上下文中为空字符串),子句的第二部分and将不会被评估,正如您已经知道的那样False(False并且任何内容都总是False)。因此,该or子句的第二部分被评估,返回一个空字符串。
您可以用更详细的方式编写它:
if parameter:
return " " + parameter
else:
return ""
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44353 次 |
| 最近记录: |