返回真/假vs返回1/0

时间:2019-06-24 20:45:21

标签: python

使用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。

2 个答案:

答案 0 :(得分:4)

在Python中,boolint的子类:

In [1]: issubclass(bool, int)                                                                                                                                                                             
Out[1]: True

因此,True / Falseint的实例:

In [2]: isinstance(True, int)                                                                                                                                                                            
Out[2]: True

以及1 == True0 == 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(),这将失败,因为True1 is True,因为它们是内存中的不同对象。

但是如果您要使用来检查真实性

False

两者都可以。

答案 1 :(得分:1)

我将答案分为两部分:

1)在Python中哪个更好/更常规?

这部分没有一个明确的答案,因为这取决于您要使用这些值的目的。通常,如果要检查某些条件(例如在if语句中使用),则将使用布尔值-TrueFalse

如果您要进行一些数值计算(当然,还会有更多用例...),您可能需要使用int s。

2)它们是等效的吗?

因为它们是不同的类型,所以它们在对象的意义上并不等效。确实可以在以下代码中看到:

>>> 1 is True
False
>>> 0 is False
False

但是

在后台调用的内置函数__bool__返回False表示0,返回True表示其他任何数字。因此,当使用整数与布尔值相等时(例如,作为if语句的条件),将相应地使用上述值。