类型内置函数-type() isinstance()
本文作者:余术玲
文字编辑:宁刘莹
技术总编:张 邯
一.Python中的对象及产生过程
在Python中万物皆对象,对象是Python中最基本的概念,对象是一个什么概念呢?通俗地说,在Python中,我们使用一些东西在做事情,“东西”指的就是我们操作的对象,数据以对象的形式出现。
学习了一段时间Python,你有没有产生过这样的疑问——当我们使用变量时都没有声明变量的存在和类型但变量仍可以工作,例如,当输入var=“wzc”时,即使没有告诉Python把 var作为一个变量使用,也没有告诉它把var作为一个字符串类型对象,但一样也能工作。事实上,Python将这个赋值请求分为三个步骤:
1.创建一个对象来代表字符串wzc。
2.创建一个变量(也就是变量名)var。
3.将变量var与对象wzc相连接。
实际的效果如下图所示:变量和对象保存在内存中不同的部分,并通过连接相关联,从变量到对象的连接称为引用,一旦变量var被使用,Python自动跟随这个变量到对象“wzc”的连接。在脚本中,每一次通过运行一个表达式生成一个新的值,Python都创建了一个新的对象(一块内存)去表示这个值,这工作看起来就像每一个表达式结果的值都是一个不同的对象,而每一个对象都在不同的内存。
但是对象有更复杂的结构而不仅仅是有足够的空间存储它的值那么简单,每一个对象都有两个标准的头部信息,其中一个头部信息是类型标识符,它标记了这个对象的类型,所以对象知道自己的类型,即在Python中,类型是在运行过程中自动决定的,而不需要通过代码声明。
我们需要注意到,Python中的类型是与对象相关联的,而不是和变量关联,变量没有类型,类型属于对象。我们把var修改为对不同的对象的引用,只是让变量引用了不同类型的对象,并没有改变变量var的类型。
二.Python中的数据类型
对于问题中涉及的不同对象,可以选择不同的类型来表示,不同类型表示的范围和能力不一样,处理问题的效率也不一样,而有了明确的数据类型,程序才能给数据分配明确的空间,才能够获得精确的计算。Python中可以自定义数据类型,所以可以有无限种数据类型,我们用下面的表格介绍Python中的内置对象类型以及能够生产这些对象的表达式。
三.Python中的类型内置函数
那么,我们如何判断对象的数据类型呢?在Python中,有三个获取数据类型的内置函数,分别是type()函数、 isinstance()函数、 issubclass()函数。今天我们介绍前两种函数。
在介绍类型内置函数前,我们需要了解类对象和实例对象的概念。类对象是将具有相似属性和方法的对象总结抽象为类对象,可以定义相似的一些属性和方法。实例对象又称实例化对象,不是抽象而是一类对象中具体的一例对象。比如:姓名、年龄是类对象,具体的某个人的姓名(张三)、年龄(21)就是实例对象。
接下来,我们详细地为大家介绍type()、 isinstance()这两种类型内置函数的用法。
1.type()函数
type()是一个最实用又简单的查看数据类型的函数,type()函数的用法是type(object),object是传入对象,type()函数作用是传入一个参数时,直接返回传入参数的类型,请看以下示例:
In [1]: type(2)
Out[1]: int
In [2]: type('wzc')
Out[2]: str
In [3]: type([1,2,3])
Out[3]: list
In [4]: type((1,2,3))
Out[4]: tuple
In [5]: type({'i':1,'j':2})
Out[5]: dict
In [6]: type({'m','n'})
Out[6]: set
从程序运行结果可以看出type()返回一个实例对象所属的类型。
2. isinstance()函数
isinstance()函数用于判断实例对象与类对象的关系,isinstance()函数用法是:isinstance(object, classinfo),返回值为一个布尔变量。
第一个参数是实例对象,第二个参数是自定义的类型或Python标准数据类型,例如int,也可以是由自定义的类型或Python标准数据类型构成的元组,如(int,str),如果 classinfo 既不是类型,也不是类型元组或类型的递归元组,那么会触发TypeError异常。
2.1第二个参数是Python标准数据类型,对象的类型与参数二的类型相同则返回True。
In [13]: isinstance(8.9,float)
Out[13]: True
In [14]: isinstance('wzc',str)
Out[14]: True
In [15]: isinstance((1,2,3),tuple)
Out[15]: True
2.2第二个参数是类型元组,对象的类型在元组中,就返回True。
In [16]: isinstance(1,(int,str))
Out[16]: True #实例对象object的类型是int,第二个参数中包含int,因此返回True
In [17]: isinstance([1,2],(int,str))
Out[17]: False #实例对象object的类型是list,第二个参数中不包含list,因此返回False
四.类型内置函数的区别
在Python中经常使用这两个内置函数判断数据类型,那么这两个函数有什么区别呢?下面简单总结一下。
type()只接受一个参数,直接返回参数类型,而isinstance()只能判断参数是否属于某个已知的类型,不能直接得到参数所属的类型。如果需要使用type()判断是否为某种类型需要使用以下命令:
In [18]: type(1) == int
Out[18]: True #判断1的类型是否为int,结果为True
在实际应用中,通常使用这两个函数先对对象进行类型判断,符合预期要求的类型后再进行后续操作,这样避免了由于类型错误导致的程序报错,提高了程序的稳健性,接下来我们还会继续介绍子类和issubinstance()函数,也会进一步讨论isinstance()函数的判断子类的应用场景,敬请期待哦!
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。