【Python Tips】Python内置函数isinstance——检测数据类型:处理多种类型的输入参数(对比type)

一、引言

        在python中写函数或类时,为了提升方法的适用范围,也为了防止报错,对于某些输入参数的类型可能不是固定的,而是可以根据不同类型来做不同处理。

        此时,就需要对输入的参数进行类型判断。python内置的 isinstance 函数就是一个常用的实现方法(虽然使用type()也可以实现某些情况,但是isinstance具有更强大的扩展功能)

二、使用

        1.基本用法

        isinstance接受两个参数输入,第一个是数据,第二个是判断的数据类型,返回的是一个bool数据——True or False。例如在一个处理图片的函数中,可以判断输入数据的格式是否满足要求。

def handle_input(input_data):
    # 判断是否为字符串类型,通常表示文件路径
    if isinstance(input_data, str):
        try:
            image = Image.open(input_data)
            print("输入的是图片路径,已成功加载图片")
            return image
        except Exception as e:
            print(f"加载图片失败: {e}")
            return None

    # 判断是否为 PIL.Image.Image 类型,表示已加载的图片数据
    elif isinstance(input_data, Image.Image):
        print("输入的是已加载的图片数据")
        return input_data

    # 判断是否为列表类型
    elif isinstance(input_data, list):
        print("输入的是列表")
        # 可以在这里对列表内容进行进一步的操作
        return input_data

    # 判断是否为字典类型
    elif isinstance(input_data, dict):
        print("输入的是字典")
        # 可以在这里对字典内容进行进一步的操作
        return input_data

    # 如果输入类型不在上述范围内
    else:
        print("输入的类型不支持")
        return None

        2.扩展用法

        isinstance函数还可以对多个类型和自定义类进行检查判断。

        对多个类型的判断只需在第二个参数数据类型输入元组结构即可。

x = 10.5
print(isinstance(x, (int, float))) 
# 输出 True,因为 x 是 float 类型

y = int(10)
print(isinstance(y, (int, float))) 
# 输出 True,因为 y 是 int 类型

        更强大的功能是,isinstance还可以用于检查子类关系,这是type()方法无法实现的。

class Father:
    pass

class Son(Father):
    pass

d = Son()

print(isinstance(d, Son))     
# 输出 True,因为 d 是 Son 的实例

print(isinstance(d, Father)) 
# 输出 True,因为 (d)Son 是 Father 的子类
上一篇:CDH大数据平台部署


下一篇:企业级工位管理:Spring Boot解决方案