Python:为什么“if <some integer =”“>”等同于“if True”?

时间:2016-06-14 15:53:18

标签: python if-statement

我遇到过这段代码:

counts = 128 * [0]

# some other steps here that modify the variable counts...
# in the end we have something like counts=[12, 583, 0, etc. , etc., 384]

for i in range(len(counts)):
    if counts[i]:
        outfile.write("%-12s%d\n" % (display(i), counts[i]))

关于if语句,我知道引入它是为了在counts[i]==0时跳过指令。这是因为0相当于False。但另一方面,我认为任何其他整数(除了1)都不等同于True。事实上,如果我在shell上输入3 == True,我会得到False作为答案。那么,if <some integer>等同于if True是否有任何特殊原因?

3 个答案:

答案 0 :(得分:5)

3 == True将3-as-an-integer与True-as-a-boolean进行比较。

if 3:正在强制转换为布尔值。

您会看到bool(3) == True是真的。

答案 1 :(得分:3)

Quoting docs

  

可以测试任何对象的真值,以便在if或while中使用   条件或下面的布尔运算的操作数。下列   值被视为错误:

     
      
  • None
  •   
  • False
  •   
  • 任何数字类型的零,例如00L0.00j.
  •   
  • 任何空序列,例如''()[]
  •   
  • 任何空映射,例如{}
  •   
  • 用户定义的类的实例,如果类定义了__nonzero__()__len__()方法,则该方法返回   整数零或bool值为假。
  •   
     

所有其他值都被视为正确 - 因此许多类型的对象始终为真。

答案 2 :(得分:0)

简单地在shell中尝试bool(3)True)和bool(0)False)。

bool为零Falsebool为非零为True