foo is None" 和 "foo == None" 有什么区别吗?
这段话在问:
if foo is None: pass
和
if foo == None: pass
这两者之间有没有什么区别?
我看到的大部分Python代码(还有我自己写的代码)都用的是前者,但我最近遇到了一些代码用的是后者。None是NoneType的一个实例(如果我没记错的话,是唯一的一个),所以这应该没什么关系,对吧?有没有什么情况下会有区别呢?
12 个回答
28
提醒一下:
if foo:
# do something
这并不完全等同于:
if foo is not None:
# do something
前者是一个布尔值的测试,可以在不同的情况下评估为假。布尔值测试中有很多东西可以表示假,比如空的容器和布尔值本身。在这种情况下,None
也会被评估为假,但还有其他东西也是如此。
51
274
is
总是会返回 True
,如果它比较的是同一个对象实例。而 ==
的结果则是由 __eq__()
方法来决定的。
也就是说:
>>> class Foo:
def __eq__(self, other):
return True
>>> f = Foo()
>>> f == None
True
>>> f is None
False