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

时间:2018-01-16 13:12:51

标签: python string python-3.x if-statement boolean

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

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是假的!发生了什么事?

1 个答案:

答案 0 :(得分:7)

if s类似于if bool(s),即评估值的布尔真值。除了True之外,还有更多的值 truthy 。由于字符串不是,因此值Trues == True为false。

  

默认情况下,除非其类定义,否则将对象视为true   返回__bool__()False的{​​{1}}方法   使用对象调用时返回零的方法。这是最多的   被视为false的内置对象:

     
      
  • 常量定义为false:__len__()None
  •   
  • 任何数字类型的零:False00.00jDecimal(0)
  •   
  • 空序列和集合:Fraction(0, 1)''()[]{}set()
  •   
     

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

相关问题