bool() 与不是 None

bool() vs is not None

我有两个 return 布尔函数。第一个是使用 bool(),第二个是使用 is not None.

def func_1(x) -> bool:
    return bool(x)

def func_2(x) -> bool:
    return x is not None

foo = "something"
bar = None

print(func_1(foo))
print(func_2(foo))
print("-----")
print(func_1(bar))
print(func_2(bar))

这是输出

True
True
-----
False
False

在这种情况下,is not Nonebool() 之间有区别吗?使用一个或另一个时,我可能需要考虑什么?

根据 this site,使用 bool 函数,以下所有内容都会 return False :

  1. None
  2. 运营商...

Is there a difference between is not None and bool() in this instance?

是的!查看 Python 文档 here,你会发现有些值 falsey 甚至与 None.

不同

举个例子:

>>> 0 != None
True
>>> bool(0)
False

下面是bool对各种类型的影响(不全面):

  • 数字类型:如果为 0,则为假,否则为真
  • 序列类型(列表、元组等):如果为空则为假,否则为真
  • 对象:如果 None 则为假,否则为真

(请注意,如果将 None 分配给先前引用序列类型的变量,语义将从上面的第 2 点变为第 3 点)。

下面是is not None的效果:

  • 变量赋值为 None: False
  • 其他:正确