Python:用'or'运算符比较字符串
Python: Compare strings with 'or' operator
在Python3教程中说"It is possible to assign the result of a comparison or other Boolean expression to a variable."给出的例子是:
>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
>>> non_null = string1 or string2 or string3
>>> non_null
'Trondheim'
'or' 运算符在比较字符串时究竟做了什么?为什么选择 'Trondheim'?
or
returns 如果为真则左边的值,否则右边的值。
对于字符串,只有 ""
(空字符串)不是真的,其他都是。
所以
>>> "" or "Test"
"Test"
和
>>> "One" or "Two"
"One"
它根本不做比较。
包括or
select第一个非假字符串(从左到右检查),在本例中是'Trondheim'
>>> bool('')
False
>>> bool('Trondheim')
True
在执行这种类型的检查时有时更可取 strip
字符串文字作为空白 space 也是真实的,如果你不打算 select 白色 spaces.
>>> bool(' ')
True
当被视为布尔值时,空字符串将 return False
而非空字符串将 return True
.
由于Python支持短路,在表达式a or b
中,如果a
为True,b
将不会被计算。
在您的示例中,我们有 '' or 'Trondheim' or 'Hammer Dance'
。
这个表达式是从左到右求值的,所以首先求值的是'' or 'Trondheim'
,或者换句话说False or True
,即returns True
。接下来,Python 尝试评估 'Trondheim' or 'Hammer Dance'
,这又变成了 True or 'Hammer Dance'
。由于前面提到的短路,因为左边的对象是 True,'Hammer Dance'
甚至没有被评估为 True
,这就是 'Trondheim'
被 returned 的原因。
在 non_null
的赋值中,or
比较按顺序计算,转换为:
if string1:
non_null = string1
elif string2:
non_null = string2
elif string3:
non_null = string3
else:
non_null = False
但是,在您的示例中,string1
是一个空字符串,计算结果为 False
(您可以通过在提示中键入 if not '':print("Empty")
来检查)。
由于 string2
不为空,因此计算为 True
,因此将其分配给 non_null
,因此得到结果。
在Python3教程中说"It is possible to assign the result of a comparison or other Boolean expression to a variable."给出的例子是:
>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
>>> non_null = string1 or string2 or string3
>>> non_null
'Trondheim'
'or' 运算符在比较字符串时究竟做了什么?为什么选择 'Trondheim'?
or
returns 如果为真则左边的值,否则右边的值。
对于字符串,只有 ""
(空字符串)不是真的,其他都是。
所以
>>> "" or "Test"
"Test"
和
>>> "One" or "Two"
"One"
它根本不做比较。
包括or
select第一个非假字符串(从左到右检查),在本例中是'Trondheim'
>>> bool('')
False
>>> bool('Trondheim')
True
在执行这种类型的检查时有时更可取 strip
字符串文字作为空白 space 也是真实的,如果你不打算 select 白色 spaces.
>>> bool(' ')
True
当被视为布尔值时,空字符串将 return False
而非空字符串将 return True
.
由于Python支持短路,在表达式a or b
中,如果a
为True,b
将不会被计算。
在您的示例中,我们有 '' or 'Trondheim' or 'Hammer Dance'
。
这个表达式是从左到右求值的,所以首先求值的是'' or 'Trondheim'
,或者换句话说False or True
,即returns True
。接下来,Python 尝试评估 'Trondheim' or 'Hammer Dance'
,这又变成了 True or 'Hammer Dance'
。由于前面提到的短路,因为左边的对象是 True,'Hammer Dance'
甚至没有被评估为 True
,这就是 'Trondheim'
被 returned 的原因。
在 non_null
的赋值中,or
比较按顺序计算,转换为:
if string1:
non_null = string1
elif string2:
non_null = string2
elif string3:
non_null = string3
else:
non_null = False
但是,在您的示例中,string1
是一个空字符串,计算结果为 False
(您可以通过在提示中键入 if not '':print("Empty")
来检查)。
由于 string2
不为空,因此计算为 True
,因此将其分配给 non_null
,因此得到结果。