Rag*_*age 0 python boolean list python-3.x
在 Python 中,空列表被视为 Falsey 值
因此,事情应该是这样的:
>>> [] and False
False
Run Code Online (Sandbox Code Playgroud)
但实际上,python 返回一个空列表。
>>> [] and False
[]
Run Code Online (Sandbox Code Playgroud)
这是故意的还是错误?
这是故意的。和and都or被定义为返回最后评估的东西(基于短路),而不是实际上True或False。对于and,这意味着它返回第一个假值(如果有),如果所有其他值都是真值,则返回最后一个值(无论真值如何)。
在添加条件表达式之前它特别有用,因为它可以让您执行一些几乎等效的黑客操作,例如在条件表达式之前:
b if a else c
Run Code Online (Sandbox Code Playgroud)
可以写成:
a and b or c
Run Code Online (Sandbox Code Playgroud)
并且,假设b它本身是某种真实的东西,它会表现得等效(条件表达式缺乏这种限制,并且对意图更清楚,这就是添加它的原因)。即使在今天,此功能有时也可用于将所有虚假值替换为一些更具体类型的默认值,例如,当lst可能作为None或 a传递时list,您可以确保它是 a list:
lst = lst or []
Run Code Online (Sandbox Code Playgroud)
用一个新的空的廉价替换None(和任何其他虚假的东西)list。