PEP8:`是True`和`是None`

问题描述 投票:1回答:1

PEP8对布尔比较有很强的见解:

请勿使用==将布尔值与True或False进行比较:

正确:

if greeting:

错误:

if greeting == True:

更糟:

if greeting is True:

但是当谈论也是内置的单例None时,建议是:

与单例的比较(如None,应该始终使用is or not,永远不要使用相等运算符。

因此,关于布尔值,为什么检查x is True是否比检查x == True更糟糕?

python coding-style styling pep8
1个回答
0
投票
“ is”测试身份,并且不像“ ==”那样进行比较。 “是”测试两个名称是否实际引用内存中的同一对象。

这里的重要区别:“是”

不能被重载,但是“ ==”可以。参见以下示例:

class deceive(): def __eq__(self, other): return True
无论等式右边是什么,此类均重载“ ==”并返回“ True”:

print(deceive() == None) True

当然,这不适用于身份检查:

print(deceive() is None) False

我想这是一个理论上的考虑,在“现实”生活中不太重要,但是与

None

相比,使用“ is”代替“ ==”仍然更安全一些。

但回到您的问题:

当您检查

boolean变量]的“真实性”时>(这与上面的None示例不同),如果它指向一个单一的“ True”位置,则您很可能不感兴趣在您的记忆中,但其值等于“ True”。在这种情况下,Python甚至允许您完全省略比较,从而提高了代码的可读性。仅此而已。

© www.soinside.com 2019 - 2024. All rights reserved.