为什么即使条件为False也会执行"if"语句?

Pea*_*ful -4 python string if-statement boolean python-3.x

好吧这可能是微不足道的,但为了清楚起见,我仍然在问它:

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
Run Code Online (Sandbox Code Playgroud)

所以字符串不等于True,甚至if认为它是True.明确检查是否s == True返回False.

In [6]: if not s:
   ...:     print("works")
Run Code Online (Sandbox Code Playgroud)

所以这里的if声明not s是假的!怎么了?

dec*_*eze 7

if s类似于if bool(s),即评估值的布尔真值.更多的价值观不仅仅是真实的True.由于字符串不是True,因此s == True为false.

默认情况下,对象被视为true,除非其类定义__bool__()返回False__len__() 方法或返回零的方法(使用对象调用时).以下是大多数被认为是错误的内置对象:

  • 常量定义为false:NoneFalse.
  • 任何数值类型的零:0,0.0,0j,Decimal(0),Fraction(0, 1)
  • 空序列和集合:'',(),[],{},set(),range(0)

https://docs.python.org/3/library/stdtypes.html#truth-value-testing