在python真值测试中bool()vs ==之间有什么区别吗?

时间:2015-09-16 18:27:38

标签: python boolean

我有两个问题。

  1. python中的ANYTHING(对象,类型,操作,函数..)在bool()方法调用时是否会返回一个布尔值?

  2. 为什么以下两行代码不会返回相同的答案?

    print (float == True)  #prints False
    print bool(float)      #prints True
    

3 个答案:

答案 0 :(得分:3)

两者==bool()不同。 ==用于等式测试,而bool()返回作为参数传递给它的对象的真值测试结果。

根据bool() -

的文件
  

类bool([x])

     

返回一个布尔值,即True或False之一。使用标准真值测试程序转换x。如果x为false或省略,则返回False;否则它返回True。

标准真值测试程序可在the documentation -

中找到
  

可以测试任何对象的真值,用于if或while条件或下面布尔运算的操作数。以下值被视为false:

     
      
  1. None

  2.   
  3. False

  4.   
  5. 任何数字类型的零,例如00L0.00j

  6.   
  7. 任何空序列,例如''()[]

  8.   
  9. 任何空映射,例如{}

  10.   
  11. 用户定义类的实例,如果类定义了__nonzero__()__len__()方法,则该方法返回整数零或bool值为False。

  12.         

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

执行bool(float)时,您正在检查float的真值,即真。

但是当你做float == True时,你正在做平等(请注意这不是真值测试,它是平等的)。在这种情况下,floatTrue不相等,因此会产生False

答案 1 :(得分:1)

  1. 是。 The docs for bool() say
  2.   

    class bool ([ x ])

         

    返回一个布尔值,即True或False之一。使用标准真值测试程序转换 x

    standard truth testing procedure适用于任何对象:

      

    可以测试任何对象的真值,用于if或while条件或下面布尔运算的操作数。以下值被视为false:[...]所有其他值都被视为true - 因此许多类型的对象始终为true。

    1. DataGridView control is data-bound. The control cannot use the comparer to perform the sort operation.不等于True。但是,当询问" SortGlyph是一个真正的价值",即float会评估真正的分支或假分支时,答案是"是的,它会评估真正的分支"。

答案 2 :(得分:0)

  1. 是的,Python中的每个对象都会返回一个布尔值,当与public class ModelA extends Model<DetailsA> { public BigDecimal getBetragA() { return this.getDetails().getBetragA(); } } public class ModelB extends Model<DetailsB> { public boolean getBooleanB() { return this.getDetails().isBooleanB(); } public void setBooleanB(boolean boolB) { this.getDetails().setBooleanB(boolB); } } 一起使用时会调用此对象的bool - 方法

  2. 因为第一个__nonzero__没有调用print方法。