最近我在python中遇到了以下代码段:
a = 'holy'
b = 'grail'
c = None
d = a or b or c
print(d) #prints holy
我认为它将打印True
。因为bool(a) = True
,bool(b) = True
和bool(c) = False
,所以我认为这可以简化为(True or True) or False
的{{1}}。但是,True
仅被分配给d
。我对python的工作方式有基本的误解吗?
有人可以确切解释发生了什么吗? a
只是多余的吗?
答案 0 :(得分:1)
or
链返回第一个 truthy 值,如果所有先前值均为 falsey ,则返回链中的最后一个。
因此,由于名字a
包含真实值(空字符串为false BTW),因此or
链返回该值。
尝试使用a = b = ''
,您会发现a or b or c
返回None
(c
的值,即使它是 falsey )。
答案 1 :(得分:0)
请参阅@heemayl的答案以获取解释。为了产生所需的内容,可以使用any
,如果iterable的任何值是真实的,则返回True
。
a = 'holy'
b = 'grail'
c = None
d = any([a, b, c])
print(d) # Now prints True