首页 Python 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]),)#

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.0532zz.com/html/kaifa/python/20210330/18022.html
上一篇
下一篇

作者: dawei

【声明】:青岛站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

返回顶部