[Python] isinstance()函数

isinstance()是Python中的一个内置函数,用来判断一个对象的变量类型(判断数据是不是指定的类型)

语法

isinstance(object, classinfo)

参数

object : 实例对象

classinfo: 可以是直接或间接类名、基本类型或者由它们组成的元组

对于基本类型来说, classinfo 可以是int,float,bool,complex,str(字符串),list,dict(字典),set,tuple(元组)

注意: classinfo 的字符串是 str 而不是 string,字典也是简写 dict

返回值

如果对象的类型与参数二的类型(classinfo)相同则返回True,否则返回False

实例

a = 2
print(isinstance(a,int)) # True
print(isinstance(a,str)) # False
# 报错
print(isinstance(a,string)) # NameError: name 'string' is not defined

print(isinstance(1,int)) # True
print(isinstance(1.0,float)) # True
print(isinstance(True,bool)) # True
print(isinstance(False,bool)) # True
print(isinstance({'Price':123},dict)) # True
print(isinstance([1,2,3],list)) # True
print(isinstance(set([1,2,3,3]),set)) # True
print(isinstance((1,2,3),tuple)) # True

# classinfo是元组
print(isinstance(a,(str,int,list))) # 是元组中的一个,返回True

# classinfo是类名
class Myclass:
    pass

# test是Myclass的实例
test = Myclass()
print(isinstance(test, Myclass)) # True

isinstance()type()的区别

type()不会认为子类是一种父类类型,不考虑继承关系

isinstance()会认为子类是一种父类类型,考虑继承关系

如果要判断两个类型是否相同推荐使用isinstance()

class A:
    pass
 
class B(A):
    pass
 
isinstance(A(),A) # True
type(A()) == A    # True
isinstance(B(),A) # True
type(B()) == A    # False

扩展案例

import pandas as pd

df = pd.DataFrame([[1,2,None,0,None]],
                  columns=['Monday','Tuesday','Wednesday','Thursday','Friday'])

#--------------------------------------------
df:
   Monday  Tuesday Wednesday  Thursday Friday
0       1        2      None         0   None
---------------------------------------------

def fn(row):
    l = [i for i in [row['Monday'],row['Tuesday'],row['Wednesday'],
                     row['Thursday'],row['Friday']] if isinstance(i,int)]
    return l

# res返回结果:[1, 2, 0]
# 即每行非None的列值(不包括index列)
# 因为只有一行的数据,所以是该行'Monday','Tuesday','Thursday'三列的数值
res = df.apply(lambda row:fn(row), axis = 1)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值