Python:将字符串与'或'进行比较操作者

时间:2016-06-21 08:31:36

标签: python string python-3.x boolean boolean-logic

在Python3教程中,声明"可以将比较结果或其他布尔表达式分配给变量。"给出的例子是:

>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
>>> non_null = string1 or string2 or string3
>>> non_null
'Trondheim'

'或者'到底是什么?比较字符串时运算符吗?为什么'特隆赫姆'选择?

4 个答案:

答案 0 :(得分:2)

包含or选择第一个非虚假字符串(从左到右检查),在本例中为'Trondheim'

>>> bool('')
False
>>> bool('Trondheim')
True

有时候,对strip执行此类检查时,如果您打算不选择空格,那么字符串文字作为空格也很简洁。

>>> bool(' ')
True

答案 1 :(得分:1)

or如果为真,则返回左侧的值,否则返回右侧的值。

对于字符串,只有""(空字符串)不是true-ish,而其他所有字符串都是。

所以

>>> "" or "Test"
"Test"

>>> "One" or "Two"
"One"

根本没有进行比较。

答案 2 :(得分:1)

当被视为布尔值时,空字符串将返回False,非空字符串将返回True

由于Python支持短路,因此在a or b表达式中,如果b为True,则不会评估a

在您的示例中,我们有'' or 'Trondheim' or 'Hammer Dance'

此表达式从左到右进行评估,因此评估的第一件事是'' or 'Trondheim',换句话说False or True,它返回True。接下来,Python尝试评估'Trondheim' or 'Hammer Dance',而True or 'Hammer Dance'又变为'Hammer Dance'。由于前面提到的短路,因为左对象为True,True甚至不会被评估为'Trondheim',这就是返回 <tr id="enum-tr" data-toggle="collapse"> 的原因。

答案 3 :(得分:1)

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,因此会产生结果。