有人可以解释以下脚本输出背后的逻辑吗?
import numpy
if(numpy.dtype(numpy.float64):
print "Expected"
else:
print "Surprise!!!!"
特别考虑:
import numpy
if(object):
print "Expected!"
else:
print "Surprise"
谢谢 :)
最佳答案
np.dtype
没有定义__nonzero__
,但是它确实定义了__len__
。按照documentation,这意味着当您在布尔上下文中使用它时,如果__len__
返回非零,它将评估为True。但是,无论您传入什么类型,它始终返回零:
>>> bool(np.dtype(int))
False
>>> bool(np.dtype(float))
False
>>> bool(np.dtype(np.int8))
False
另一方面,复合数据类型确实返回非零,因此为True:
>>> bool(np.dtype([('foo', int)]))
True
然后,您可能会问,当具有单个元素的复合物1的长度为1时,为什么简单dtype的“长度”为零。我想这与维数有关:具有简单dtype和一维大小的数组本身就是一维的,但是具有复合dtype和一维大小的数组可能被认为是二维的,而不管有多少个元素在复合dtype中。