这段代码在做什么?

时间:2011-06-21 08:16:33

标签: python

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

这个来自page的python教程,我不明白第二行。

5 个答案:

答案 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] http://docs.python.org/release/2.5.2/lib/boolean.html

答案 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。