使用return True / False和return 1/0有什么区别吗?我看到一些关于php和其他语言的类似问题的线程,但是在Python中哪个更好/更常规?
运行此
type(True) # bool
type(1) # int
表明它们并不完全相同。
但是
True == 1 # returns True
False == 0 # returns True
我经常在应该返回布尔值的函数中看到return 1代替return True。
答案 0 :(得分:4)
在Python中,bool
是int
的子类:
In [1]: issubclass(bool, int)
Out[1]: True
因此,True
/ False
是int
的实例:
In [2]: isinstance(True, int)
Out[2]: True
以及1 == True
和0 == False
将比较相等(__eq__
),并且还将解析为True
/ 1(任何{{1} },除了0)为真,而int
/ 0为虚假。
但是您必须在需要时严格使用布尔值,因为False
不是布尔值:
int
例如,假设您正在检查函数In [3]: isinstance(1, bool)
Out[3]: False
以返回带有以下内容的is_correct()
(bool
):
True
如果您从if is_correct() is True:
返回1而不是is_correct()
,这将失败,因为True
是1 is True
,因为它们是内存中的不同对象。
但是如果您要使用来检查真实性
False
两者都可以。
答案 1 :(得分:1)
我将答案分为两部分:
这部分没有一个明确的答案,因为这取决于您要使用这些值的目的。通常,如果要检查某些条件(例如在if
语句中使用),则将使用布尔值-True
和False
。
如果您要进行一些数值计算(当然,还会有更多用例...),您可能需要使用int
s。
因为它们是不同的类型,所以它们在对象的意义上并不等效。确实可以在以下代码中看到:
>>> 1 is True
False
>>> 0 is False
False
但是
在后台调用的内置函数__bool__
返回False
表示0,返回True
表示其他任何数字。因此,当使用整数与布尔值相等时(例如,作为if
语句的条件),将相应地使用上述值。