Numpy的逻辑函数和"如果cond是False"成语

时间:2018-03-13 17:17:21

标签: python numpy pycharm

当应用PEP8时#34;如果cond为False" PyCharm用np.isinf np.isnan>>> import numpy as np ... assert not np.isnan(0), "first test failed" ... assert np.isnan(0) is False, "second test failed" AssertionError: second test failed 提出的成语,我们得到了令人惊讶的行为。

bool

1 个答案:

答案 0 :(得分:3)

问题在于numpy的逻辑函数不返回numpy.bool_,而是返回>>> np.bool_(False) is False False 的实例,这是一种不同的类型。因此,

dtype

可以考虑使用这些函数的bool参数强制>>> type(np.isnan(0, dtype=bool)) numpy.bool_ 输出,但这不会起作用。

>>> bool(np.isnan(0)) is False
True

解决方案是明确地对bool进行演绎:

if cond is False

更好:永远不要使用cond成语,当not cond不是布尔值时,这个成语可能会中断。只需使用>>> not np.isnan(0) True

if cond is False

实际上,我没有在PEP8中找到{{1}}成语的推荐; numpy's logic functions

Yes:   if greeting:
No:    if greeting == True:
Worse: if greeting is True:

我不知道为什么这个成语是由PyCharm提出的。不要使用它,我被它咬了,你也没理由这样做。