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

猜你喜欢

转载自blog.csdn.net/crleep/article/details/130438073