为什么bool(x)其中x是任何等于True的整数

时间:2013-10-08 18:56:30

标签: python

我希望bool(1)使用Python等同于True - 它确实 - 然后我希望其他整数在转换为bool时出错,但似乎并非如此:

>>> x=23 #<-- replace with any integer
>>> bool(x)
True

发生了什么事?我误解bool(x) - 这不会将x转换为Boolean数据类型吗?


很多关于为什么我发现这种反直觉的评论。如果我像下面那样写上面的内容,那么在第一眼看不懂语言的情况下,这似乎是违反直觉的:

>>>True == bool(23)
True

4 个答案:

答案 0 :(得分:12)

来自5.1 Truth Value Testing

  

以下值被视为false:

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

所有其他值被视为 true - 所以很多类型的对象都是   总是如此。

答案 1 :(得分:2)

bool的目的不是将值转换为bool数据类型本身。相反,它返回值是否真实,即它的行为与此函数的行为相同:

def bool_mimic(val):
    if val:
        return True
    else:
        return False

来自the docs

  
    

BOOL([X])

         

使用标准真值测试程序将值转换为布尔值[请参阅Rohit的答案]。如果x为false或省略,则返回False;否则返回Truebool也是一个类,它是int的子类。类bool不能进一步子类化。它的唯一实例是FalseTrue

  

在整数的情况下,唯一的非真实整数是0

答案 2 :(得分:2)

bool(x)使用标准真值测试程序将其参数转换为Bool。例如,在if测试中返回true的任何内容在作为参数传递给True时将返回bool

检查Truth Value Testing以查看哪些值在Python中被视为TrueFalse

答案 3 :(得分:2)

正如其他海报所提到的,它在任何非零整数上都给出了真值。

它类似于python中的其他东西,如下所述:

Python 'If not' syntax

(Rohit引用了一个关于真值测试的好段落)