python – 与布尔numpy数组VS PEP8 E712的比较

前端之家收集整理的这篇文章主要介绍了python – 与布尔numpy数组VS PEP8 E712的比较前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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).

原文链接:https://www.f2er.com/python/186579.html

猜你在找的Python相关文章