有据可查:
x or y if x is false, then y, else x
x and y if x is false, then x, else y
两者都短路(例如,如果为 真,or
则不会评估)。y``x
__
该文档还指出了被认为 falsy (False
,0
,None
,空序列/映射,…) -一切被认为是 truthy 。
一些例子:
7 and 'a' # -> 'a'
[] or None # -> None
{'a': 1} or 'abc'[5] # -> {'a': 1}; no IndexError raised from 'abc'[5]
False and 'abc'[5] # -> False; no IndexError raised from 'abc'[5]
请注意,最后两个如何显示短路行为:IndexError
不执行第二个语句(将引发)。
您关于操作数为布尔值的说法有点无聊。python确实有布尔值(实际上只有两个:True
和False
;它们是int的子类型)。但是python中的逻辑运算只是检查操作数是 真 还是 假 。不会在操作数上调用该bool
函数。
在正式的python文档中似乎不使用术语 true 和 falsy 。但是教python和此处社区的书籍确实使用了这些术语。在english.stackexchange.com上有关于术语的讨论,在维基百科上也有提及。