Python里怎么查看数据类型

Python是一种动态类型的编程语言,也就是说,变量的类型是在运行时确定的,而不是在编写代码时。这样有利于提高编程的灵活性和效率,但也可能导致一些类型错误或混淆。因此,有时候我们需要查看变量的数据类型,以便进行正确的操作或判断。


Python里可以通过type()函数来查看数据类型。type()函数接受一个对象作为参数,返回该对象的类型。例如:


>>> x = 10

>>> type(x)

<class 'int'>

>>> y = "Hello"

>>> type(y)

<class 'str'>

>>> z = [1, 2, 3]

>>> type(z)

<class 'list'>


从上面的例子可以看出,使用type()函数,可以查看这三个变量的类型,输出的结果是int、str和list。


type()函数还可以用来创建新的类型对象,只需要传入三个参数:类的名称、基类的元组和类内定义的命名空间变量。例如:


>>> class Person(object):

...     def __init__(self, name, age):

...         self.name = name

...         self.age = age

...

>>> p = Person("Alice", 20)

>>> type(p)

<class '__main__.Person'>

>>> Person = type("Person", (object,), dict(__init__=lambda self, name, age: (setattr(self, "name", name), setattr(self, "age", age))))

>>> q = Person("Bob", 25)

>>> type(q)

<class '__main__.Person'>


从上面的例子可以看出,使用type()函数,可以创建一个新的类型对象Person,并用它来实例化一个对象q。输出的结果是<class '__main__.Person'>。


除了type()函数外,Python还提供了另一个内置函数isinstance()来判断一个对象是否是某个类型或其子类的实例。isinstance()函数接受两个参数:一个对象和一个类型或类型的元组。例如:


>>> x = 10

>>> isinstance(x, int)

True

>>> isinstance(x, (int, float))

True

>>> isinstance(x, str)

False


从上面的例子可以看出,使用isinstance()函数,可以判断x是否是int或float或其子类的实例,输出的结果是True或False。


isinstance()函数与type()函数的区别在于,isinstance()函数会考虑继承关系,而type()函数不会。也就是说,如果一个对象是某个类的子类的实例,那么isinstance()函数会返回True,而type()函数会返回False。例如:


>>> class Animal(object):

...     pass

...

>>> class Dog(Animal):

...     pass

...

>>> a = Animal()

>>> d = Dog()

>>> isinstance(a, Animal)

True

>>> type(a) == Animal

True

>>> isinstance(d, Animal)

True

>>> type(d) == Animal

False


从上面的例子可以看出,使用isinstance()函数和type()函数,可以判断a和d是否是Animal或其子类的实例,输出的结果不同。isinstance()函数返回True,而type()函数返回False。


总之,Python里查看数据类型的内置函数有两个:type()和isinstance()。type()函数返回对象的类型,isinstance()函数判断对象是否是某个类型或其子类的实例。如果要判断两个类型是否相同推荐使用isinstance()函数。


更多文章请关注《万象专栏》