奇怪的布尔行为:具有多个元素的数组的真值不明确

时间:2019-05-16 08:42:32

标签: python python-3.x numpy

我对以下观察的行为感到困惑

>>> t = numpy.array([1,2,3])
>>> type(t)
<class 'numpy.ndarray'>
>>> type(t) != numpy.ndarray
False
>>> type(t) == numpy.ndarray
True
>>> type(t) != numpy.ndarray or t == None
array([False, False, False])
>>> type(t) != numpy.ndarray or t != None
array([ True,  True,  True])

最后2条语句似乎返回布尔列表,而不仅仅是其他语句的T / F。显然,如果我们要测试obj是否为numpy数组,由于模棱两可,我们将遇到ValueError。

为什么的行为如此?

1 个答案:

答案 0 :(得分:0)

or不返回布尔值,它返回一个操作数;因此,要么是其左手表达的结果,要么是其右手表达的结果(首先是 truthy )。如果您的左手表达式为 falsey ,它将求值并返回其右手表达式。 numpy数组上的t == None返回一个值数组。

所有这些测试都是不好的做法。使用isinstance测试类型,使用None测试与is None的相等性。