PEP8 E712要求“如果cond为True,则应与True进行比较:或者如果cond:”.
但如果我遵循这个PEP8,我会得到不同/错误的结果.为什么?
In [1]: from pylab import * In [2]: a = array([True,True,False]) In [3]: where(a == True) Out[3]: (array([0,1]),) # correct results with PEP violation In [4]: where(a is True) Out[4]: (array([],dtype=int64),) # wrong results without PEP violation In [5]: where(a) Out[5]: (array([0,) # correct results without PEP violation,but not as clear as the first two imho. "Where what?"
解决方法
该建议仅适用于测试值的“真实性”的if语句. numpy是一个不同的野兽.
>>> a = np.array([True,False]) >>> a == True array([ True,False],dtype=bool) >>> a is True False
注意a是True始终为False,因为a是一个数组,而不是布尔值,并且是一个简单的引用相等性测试(因此只有True是True;例如,None不是True).