-1

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

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

怎么了?我是否误解了bool(x)- 这不会将 x 转换为Boolean数据类型吗?


很多关于为什么我觉得这违反直觉的评论。如果我像下面这样写上面的内容,乍一看没有语言知识,这似乎违反直觉:

>>>True == bool(23)
True
4

4 回答 4

13

5.1 真值测试

以下值被认为是错误的:

  • None
  • False
  • 任何数字类型的零,例如 , 0, 0L, 。0.00j
  • 任何空序列,例如'', (), [].
  • 任何空映射,例如{}.
  • 用户定义类的实例,如果该类定义了一个__nonzero__()or__len__()方法,当该方法返回整数zerobool值时False

所有其他值都被认为是真的——所以许多类型的对象总是真的。

于 2013-10-08T18:58:15.787 回答
2

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

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

文档

布尔([x])

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

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

于 2013-10-08T18:58:31.080 回答
2

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

检查真值测试以查看哪些值被视为TrueFalse在 Python中处理

于 2013-10-08T19:01:24.203 回答
2

正如其他海报所提到的,它在任何非零整数上都是真实的。

它有点类似于 python 中的其他东西,就像这里提到的:

Python“如果不是”语法

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

于 2013-10-08T19:02:27.460 回答