PEP8声明应使用None
执行is None
的检查。一般来说,单身人士也是如此。但PEP8还指出,不应使用运算符执行与True和False的相等,is
甚至比==
更差:
Yes: if greeting:
No: if greeting == True:
Worse: if greeting is True:
我理解第一个是最漂亮和最pythonic的方式,但有时我发现自己处于一种情况,我想明确表明我正在与True
或False
进行比较。在这种情况下,is
如何比==
更差?
答案 0 :(得分:4)
等于运算符==
可以由类(以及所有其他比较运算符)实现,但is
不能。
可以定义一个类,使其某些实例等于True
,但它们仍将始终无法进行is True
比较。考虑类似bool的类,例如:
class MyBool:
def __init__(self, is_true):
self.is_true = bool(is_true)
def __eq__(self, other):
return self.is_true == bool(other)
def __bool__(self):
return self.is_true
此类可以确保对于实例a = MyBool(True)
,所有if a:
,bool(a)
和a == True
都会正常运行。但是,a is True
将返回False
。
答案 1 :(得分:3)
history ^1.17.0 → ^2.0.0-rc2
react-router ^1.0.3 → ^2.0.0-rc5
在这种情况下更“糟糕”,因为需要精确的对象。第一个建议允许最大的鸭子打字,第二个允许一些典型的truthy值,最后一个允许你进行任何鸭子打字。只有is
单身人士会通过比较。
这种比较是成功的:
True
这种比较不成功:
1 == True