我对以下观察的行为感到困惑
>>> 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。
为什么的行为如此?
答案 0 :(得分:0)
or
不返回布尔值,它返回一个操作数;因此,要么是其左手表达的结果,要么是其右手表达的结果(首先是 truthy )。如果您的左手表达式为 falsey ,它将求值并返回其右手表达式。 numpy数组上的t == None
返回一个值数组。
所有这些测试都是不好的做法。使用isinstance
测试类型,使用None
测试与is None
的相等性。