python当中,True==1成立以及由此引发的一系列问题

python这门语言中,True和1是相等的, False和0是相等的

print(True==1)
print(False==0)

程序输出结果

True
True

究其根本,bool类型是int类型的子类

print(issubclass(bool, int))

程序输出结果

True

看似一个普通且合理的设定,却带来一些意想不到的影响

1. Ture 和 1不能同时作为字典的key

如下面代码所展示的定义一个字典,就会出现意想不到的结果

dic = {
    1: '1',
    True: 'True'
}
print(dic)

程序输出结果

{1: 'True'}

字典不允许key重复,True: 'True'这个key-value对覆盖了前面的,不只是不能同时出现在字典里做key,他们也不能同时出现在集合中,道理是一样的

bool类型的数据,虽然可以做字典的key,但bool类型本身也只有两个常量数值,因此,很不建议你用bool类型数据做key,即便没有1做key

2. Ture 和 1相等,导致统计不准确

lst = [1, True]

for item in lst:
    if item == 1:
        print(item)

其实代码的本意只想找到1并输出,但最终连Ture也一同输出,列表的count函数也会出现相同的情况

lst = [1, True]
print(lst.count(1))

程序输出结果为2,惊不惊喜意不意外,那么有没有什么方法可以避免呢,我们自己实现函数时,还是有办法的,但对于内置函数就无能为力了

lst = [1, True]

for item in lst:
    if not isinstance(item, bool) and item == 1:
        print(item)

先判断所遍历数据不是bool类型,然后在判断是否等于1,这里千万不要判断是否为int类型,True是bool类型,int类型是bool类型的父类,因此isinstance(True, int)返回结果为True

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案