>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
>>> non_null = string1 or string2 or string3
>>> non_null
'Trondheim'
这个来自page的python教程,我不明白第二行。
答案 0 :(得分:7)
python or
运算符可以定义为[1]:
x or y : if x is false, then y, else x
执行string1 or string2
时,string1
是一个空字符串,Python将其翻译为False
(侧节点:某些编程语言执行此操作,其他编程语言不这样做),因此它上面的定义评估为string2
的值。当它(result of 'string1 or string2') or string3
时,string2
不是空字符串,因此不等于False
,因此评估为string2
。
答案 1 :(得分:4)
演示a)运算符短路和b)在Python中,逻辑运算符可以获取并返回非bool
值:
string1 or string2 or string3 # is the same as
(string1 or string2) or string3
# string1 or string2 is '' or 'Trondheim', and as
# '' is logically False, this results in 'Trondheim'
# 'Trondheim' or string3 is short-circuited and never evaluated,
# because a non-empty string is logically True
答案 2 :(得分:2)
它只返回第一个非空字符串'Trondheim'并且与:
相同non_null = (string1 or string2) or string3
或者:
if not string1:
string3 if not string2 else string2
else:
string1
答案 3 :(得分:1)
如果使用短路布尔评估来查找列表中的第一个非空字符串。对于字符串,空字符串''
的计算结果为False
,其他所有字符串都被视为True
值。
documentation中的第5.1和5.2节告诉您理解这一点需要知道的所有内容。
特别是:
x or y if x is false, then y, else x
这是一个短路运算符,所以如果第一个参数为False,它只会计算第二个参数。
答案 4 :(得分:1)
它只检查哪个字符串不为null并将其传递给non_null变量。 string1为空,因此可以使用string2。