有人可以解释以下脚本输出背后的逻辑吗?
import numpy
if(numpy.dtype(numpy.float64):
print "Expected"
else:
print "Surprise!!!!"
特别考虑:
import numpy
if(object):
print "Expected!"
else:
print "Surprise"
谢谢:)
答案 0 :(得分:3)
np.dtype
未定义__nonzero__
,但确实定义了__len__
。根据{{3}},这意味着当您在布尔上下文中使用它时,如果__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中有多少元素。