if 在一个对象的__bool__()不返回 False 和__len__()不返回 0 的情况下认定对象为真,还有,语言内置的常量 None 和 False 被认为是假的
1. if foobar != None 和 if foobar is not None 是完全等价吗? 在下面这种或与其类似的情况下是完全等价的: class Hello: def __ne__(self, other): print("Excalibur !") return (self is not other)
foobar = Hello() print(foobar is not None) print(foobar != None) 一般而言,是不完全等价的 因为 is not 测试 foobar 的 id 和 None 的 id 是否相同,而!=测试 foobar 的值和 None 的值是否相同
2. if foobar is not None 和 if foobar 是完全等价吗? 一般情况下是不等价的,因为前者测试 id 是否相同,后者测试 foobar 的__bool__()或__len__() 当然你也可以修改 foobar 的__bool__函数 以上结论基于 Python3.6 的官方文档^^/