有人可以解释以下脚本输出背后的逻辑吗?
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 ,这意味着当您在 bool 上下文中使用它时,如果 __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。我想这与维数有关:具有简单数据类型和一维大小的数组本身就是一维的,但是具有复合数据类型和一维大小的数组可以被认为是二维的,无论有多少个元素属于复合数据类型。
关于python - 为什么 numpy.dtype(numpy.float64) 计算结果为 False,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22575699/