为什么numpy.dtype('float64')很特殊?


问题内容

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

import numpy
if(numpy.dtype(numpy.float64) == None):
    print "Surprise!!!!"

谢谢 :)


问题答案:

如果您想将任意对象与Nonepython中的对象进行完全比较,则需要使用:

object is None

像在这种情况下一样,任何对象都可能会覆盖其比较运算符以不执行您期望的操作。

至于为什么,dtype(’float64’)在dtypes的上下文中等效于None,就像dtypes等同于typestrings一样

np.dtype('i4') == 'i4'
True

平等不是身份。

至于为什么dtype(None) == dtype('float64'),numpy中的许多函数都有dtype=None关键字参数。在大多数情况下,这意味着默认dtype为dtype(None)。一个例子是np.zeros。但是也有例外,例如当可以从参数推断出dtype时,例如np.arange(10)默认dtype将为整数类型的情况(np.intp我认为)。