python这门语言中,True和1是相等的, False和0是相等的
print(True==1)
print(False==0)
程序输出结果
True
True
究其根本,bool类型是int类型的子类
print(issubclass(bool, int))
程序输出结果
True
看似一个普通且合理的设定,却带来一些意想不到的影响
如下面代码所展示的定义一个字典,就会出现意想不到的结果
dic = {
1: '1',
True: 'True'
}
print(dic)
程序输出结果
{1: 'True'}
字典不允许key重复,True: 'True'这个key-value对覆盖了前面的,不只是不能同时出现在字典里做key,他们也不能同时出现在集合中,道理是一样的
bool类型的数据,虽然可以做字典的key,但bool类型本身也只有两个常量数值,因此,很不建议你用bool类型数据做key,即便没有1做key
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