Python判断数据类型的时候遇到了问题
mixedlist1=[(5,'ddddd',6,False),['a',12,True],('c',9,10,''),'789abc',1,True]
如果bool判断在int判断前:
if isinstance(n, (bool)):
listb.append(n)
elif isinstance(n,(int)):
listi.append(n)
结果为:[5, 6, 12, 9, 10, 1] [False, True, True]
如果bool判断在int判断之后,结果就会出现:[5, 6,False, 12, True, 9, 10, 1] [True ]
原因是: 内建函数isinstance的原型int PyObject_IsInstance(PyObject *inst, PyObject *cls),此函数中会检查实例的父类的类型,而bool是int类型的子类(参见类型PyBool_Type与PyInt_Type),当然使用isinstance就无法准确判断bool与int型了。 大致理解为:因为bool是int的子类,所以在判断int的时候,如果为int,返回ture,如果为bool,因为是子类,所以也返回true