好的,这可能是微不足道的,但为了清楚起见,我仍然在问它:
In [1]: s = "abc"
In [2]: type(s)
Out[2]: str
In [3]: if s:
...: print("works")
works
In [4]: s == True
Out[4]: False
因此字符串不等于True
,即使if
认为它是True
。明确检查s == True
是否返回False
。
In [6]: if not s:
...: print("works")
所以这里if
语句,not s
是假的!发生了什么事?
答案 0 :(得分:7)
if s
类似于if bool(s)
,即评估值的布尔真值。除了True
之外,还有更多的值 truthy 。由于字符串不是,因此值True
,s == True
为false。
默认情况下,除非其类定义,否则将对象视为true 返回
__bool__()
或False
的{{1}}方法 使用对象调用时返回零的方法。这是最多的 被视为false的内置对象:
- 常量定义为false:
__len__()
和None
。- 任何数字类型的零:
False
,0
,0.0
,0j
,Decimal(0)
- 空序列和集合:
Fraction(0, 1)
,''
,()
,[]
,{}
,set()
https://docs.python.org/3/library/stdtypes.html#truth-value-testing