条件内部int(x)方法,即使它不采用布尔值

时间:2017-12-30 07:52:07

标签: python

我正在研究Python内置方法int(x),它将变量强制转换为int。文档位于https://docs.python.org/2/library/functions.html#int

在我发现的代码中:

errors += int(update != 0.0)

此代码只是增加或减少错误变量。 我看到的是条件作为变量,即使该方法不采用布尔值。这怎么可能?

3 个答案:

答案 0 :(得分:2)

考虑两种可能性:

int(True)int(False)
第一种情况将评估为1,第二种情况评估为0 因此,errors会增加1或增加0

参考doc

  

布尔值是两个常量对象False和True。它们用于表示真值(尽管其他值也可以被认为是假或真)。在数字上下文中(例如,当用作算术运算符的参数时),它们的行为分别与整数0和1 相似。如果值可以解释为真值,则内置函数bool()可用于将任何值转换为布尔值(请参阅上面的真值测试部分)。

答案 1 :(得分:2)

The Python 3 documentation比这里的2个文档更直接,所以我引用它:

  

返回由数字或字符串x构造的整数对象,如果没有给出参数,则返回0。如果x是一个数字,请返回x.__int__()

所以int接受字符串或数字。布尔值不是字符串,但它们实际上是数字!在Numeric Types – int, float, complex链接后解释了......

  

有三种不同的数字类型:整数浮点数复数此外,布尔值是整数的子类型。

你可以在REPL中确认:

>>> import numbers
>>> isinstance(False, int)
True
>>> isinstance(True, numbers.Numeric)
True

并通过使用布尔值进行数学运算,它可以作为人们期望的整数值0和1:

>>> True * 5
5
>>> math.acos(False)
1.5707963267948966

答案 2 :(得分:0)

布尔值是python中的一个Integers子类,在内部,False在Python中表示为0