Python中True、False、None的判断(避坑)
2.4 Python中True、False、None的判断
在Python中,所有的空值和0在作为条件表达式时,隐式的进行bool转换后都是False,比如:空列表:[]、空字符串:‘’、空字典:{}等等。
from icecream import ic
a = ''
b = 0
c = []
d = {}
e = set()
f = None
ic(not a, not b, not c)
ic(not d, not e, not f)
ic| not a: True, not b: True, not c: True
ic| not d: True, not e: True, not f: True
None是一个特殊的常量,表示空。有着自己的类型:NoneType。空和空值不相等。
from icecream import ic
a = ''
b = []
ic(a is None, a == None)
ic(b is None, b == None)
ic| a is None: False, a == None: False
ic| b is None: False, b == None: False
None是一个单例对象,所有的None都指向同一个id,我们在Python中判断某个对象是否是None的时候,最好是使用is
。因为==
是调用对象的魔法方法__eq__()
,而这个魔法方法是可以重载的。这就有可能会导致判断出问题:
from icecream import ic
class Mc:
def __eq__(self, other): # Mc类实例和任何对象用`==`比较都会返回True
return True
mc = Mc()
ic(mc is None, mc == None)
ic(mc == True, mc == False)
ic| mc is None: False, mc == None: True
ic| mc == True: True, mc == False: True
同理,所有的True和False都指向同一个id,在判断Ture和False是最好也使用is
。