我希望bool(1)
使用Python等同于True - 它确实 - 然后我希望其他整数在转换为bool
时出错,但似乎并非如此:
>>> x=23 #<-- replace with any integer
>>> bool(x)
True
发生了什么事?我误解bool(x)
- 这不会将x转换为Boolean
数据类型吗?
很多关于为什么我发现这种反直觉的评论。如果我像下面那样写上面的内容,那么在第一眼看不懂语言的情况下,这似乎是违反直觉的:
>>>True == bool(23)
True
答案 0 :(得分:12)
以下值被视为false:
None
False
- 任何数字类型的零,例如
0
,0L
,0.0
,0j
。- 任何空序列,例如
''
,()
,[]
。- 任何空映射,例如
{}
。- 用户定义的类的实例,如果类定义了
__nonzero__()
或__len__()
方法,则该方法返回整数zero
或bool
值{{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
;否则返回True
。bool
也是一个类,它是int
的子类。类bool
不能进一步子类化。它的唯一实例是False
和True
。
在整数的情况下,唯一的非真实整数是0
。
答案 2 :(得分:2)
bool(x)
使用标准真值测试程序将其参数转换为Bool
。例如,在if
测试中返回true的任何内容在作为参数传递给True
时将返回bool
。
检查Truth Value Testing以查看哪些值在Python中被视为True
或False
答案 3 :(得分:2)