我有两个问题。
python中的ANYTHING(对象,类型,操作,函数..)在bool()方法调用时是否会返回一个布尔值?
为什么以下两行代码不会返回相同的答案?
print (float == True) #prints False
print bool(float) #prints True
答案 0 :(得分:3)
两者==
和bool()
不同。 ==
用于等式测试,而bool()
返回作为参数传递给它的对象的真值测试结果。
根据bool()
-
类bool([x])
返回一个布尔值,即True或False之一。使用标准真值测试程序转换x。如果x为false或省略,则返回False;否则它返回True。
标准真值测试程序可在the documentation -
中找到可以测试任何对象的真值,用于if或while条件或下面布尔运算的操作数。以下值被视为false:
None
False
任何数字类型的零,例如
0
,0L
,0.0
,0j
。任何空序列,例如
''
,()
,[]
。任何空映射,例如
{}
。- 醇>
用户定义类的实例,如果类定义了
__nonzero__()
或__len__()
方法,则该方法返回整数零或bool值为False。所有其他值都被视为
True
- 因此许多类型的对象始终为真。
执行bool(float)
时,您正在检查float
的真值,即真。
但是当你做float == True
时,你正在做平等(请注意这不是真值测试,它是平等的)。在这种情况下,float
和True
不相等,因此会产生False
。
答案 1 :(得分:1)
class bool ([ x ])
返回一个布尔值,即True或False之一。使用标准真值测试程序转换 x 。
standard truth testing procedure适用于任何对象:
可以测试任何对象的真值,用于if或while条件或下面布尔运算的操作数。以下值被视为false:[...]所有其他值都被视为true - 因此许多类型的对象始终为true。
DataGridView control is data-bound. The control cannot use the comparer to perform the sort operation.
不等于True。但是,当询问" SortGlyph
是一个真正的价值",即float
会评估真正的分支或假分支时,答案是"是的,它会评估真正的分支"。 答案 2 :(得分:0)
是的,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
- 方法
因为第一个__nonzero__
没有调用print
方法。