有人可以解释以下脚本输出背后的逻辑吗?

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中。

07-24 09:51
查看更多