PEP8对布尔比较有很强的见解:
请勿使用==将布尔值与True或False进行比较:
正确:
if greeting:
错误:
if greeting == True:
更糟:
if greeting is True:
但是当谈论也是内置的单例None
时,建议是:
与单例的比较(如None,应该始终使用is or not,永远不要使用相等运算符。
因此,关于布尔值,为什么检查x is True
是否比检查x == True
更糟糕?
这里的重要区别:“是”
不能被重载,但是“ ==”可以。参见以下示例:
class deceive():
def __eq__(self, other):
return True
无论等式右边是什么,此类均重载“ ==”并返回“ True”:
print(deceive() == None) True
当然,这不适用于身份检查:
print(deceive() is None) False
我想这是一个理论上的考虑,在“现实”生活中不太重要,但是与相比,使用“ is”代替“ ==”仍然更安全一些。None
但回到您的问题:
当您检查boolean变量]的“真实性”时>(这与上面的None示例不同),如果它指向一个单一的“ True”位置,则您很可能不感兴趣在您的记忆中,但其值等于“ True”。在这种情况下,Python甚至允许您完全省略比较,从而提高了代码的可读性。仅此而已。