使用if foo is None而不是if foo == None测试值是否具体是标准惯例None.
如果你想确定一个值是否正确True(不仅仅是一个真实的值),是否有任何理由使用if foo == True而不是if foo is True?这在CPython(2.x和3.x),Jython,PyPy等实现之间是否有所不同?
示例:say True用作要与值'bar'或任何其他类似真值的值区分开的单例值:
if foo is True: # vs foo == True
...
elif foo == 'bar':
...
Run Code Online (Sandbox Code Playgroud)
是否存在使用if foo is True会产生不同结果的情况if foo == True?
注意:我知道Python布尔值 - 如果x:,则vs x == True,vs如果x为True.但是,它仅解决是否if foo,if foo == True或if foo is True通常应用于确定是否foo具有真实值. …
PEP8 E712要求"比较True应该if cond is True:或if 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, 1]),)
# correct results without PEP violation, but not as clear as the first two imho. "Where what?"
Run Code Online (Sandbox Code Playgroud) TLDR: is-comparison 适用于 Python bool,不适用于 numpy bool_。是否存在其他差异?
几天前,我遇到了布尔人的一种奇怪行为。当我尝试对这个 numpy 数组使用 is-comparison 时:
arr1 = np.array([1,0,2,0], dtype=bool)
arr1
Out[...]: array([ True, False, True, False])
Run Code Online (Sandbox Code Playgroud)
(这些变量名是虚构的,与真实变量名或生产代码的任何相似之处纯属巧合)
我看到了这个结果:
arr1 is True
Out[...]: False
Run Code Online (Sandbox Code Playgroud)
这是合乎逻辑的,因为arr1它不是 True 或 False,它是 numpy 数组。我检查了这个:
arr1 == True
Out[...]: array([ True, False, True, False])
Run Code Online (Sandbox Code Playgroud)
这按预期工作。我提到了这个可爱的行为并立即忘记了它。第二天,我检查了数组元素的真实性:
[elem is False for elem in arr1]
它返回给我这个!
Out[...]: [False, False, False, False]
我真的很困惑,因为我记得在 Python 数组中(我认为问题出在数组行为中):
arr2 = [True, False, True, False]
[elem is False for elem in arr2]
Run Code Online (Sandbox Code Playgroud)
有用: …