我在工作中发现了一些问题,返回了包含空字符串的列表。为了简单起见,我创建了一个示例:
big_ol_trickster = [""]
if big_ol_trickster:
foo()
else:
print("You can't trick me!")
这个条件每次都会得到满足。因此,我对那里的python向导有一个疑问:为什么[] == False
和"" == False
却是[""] == True
?
答案 0 :(得分:3)
空列表为Falsey
。 [""]
不为空。它包含一个元素(也恰好是Falsey
)。 Falsey
-ness不会递归评估。
要知道为什么,请查看list
类的__bool__
dunder方法的实现。该方法用于评估python中的真值。而且,是的,您可以覆盖它。
[False, False]
->这也是Truthy
,它可能违反直觉。这就是为什么当您尝试在条件中使用序列时有时会得到"truth-value of sequences can be ambiguous, use any() or all() instead"