查看原文
其他

类型内置函数-type() isinstance()

数据分析团队 Stata and Python数据分析 2022-03-15

本文作者:余术玲

文字编辑:宁刘莹

技术总编:张   邯


一.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]: intIn [2]: type('wzc')Out[2]: strIn [3]: type([1,2,3])Out[3]: listIn [4]: type((1,2,3))Out[4]: tupleIn [5]: type({'i':1,'j':2})Out[5]: dictIn [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]: TrueIn [14]: isinstance('wzc',str)Out[14]: TrueIn [15]: isinstance((1,2,3),tuple)Out[15]: True


2.2第二个参数是类型元组,对象的类型在元组中,就返回True

In [16]: isinstance(1,(int,str))Out[16]: True #实例对象object的类型是int,第二个参数中包含int,因此返回TrueIn [17]: isinstance([1,2],(int,str))Out[17]: False #实例对象object的类型是list,第二个参数中不包含list,因此返回False


四.类型内置函数的区别

Python中经常使用这两个内置函数判断数据类型,那么这两个函数有什么区别呢?下面简单总结一下。

type()只接受一个参数,直接返回参数类型,而isinstance()只能判断参数是否属于某个已知的类型,不能直接得到参数所属的类型。如果需要使用type()判断是否为某种类型需要使用以下命令:

In [18]: type(1) == intOut[18]: True #判断1的类型是否为int,结果为True


在实际应用中,通常使用这两个函数先对对象进行类型判断,符合预期要求的类型后再进行后续操作,这样避免了由于类型错误导致的程序报错,提高了程序的稳健性,接下来我们还会继续介绍子类和issubinstance()函数,也会进一步讨论isinstance()函数的判断子类的应用场景,敬请期待哦!



对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
duplicates drop之前,我们要做什么?

数据含义记不住?—— label“大神”来帮忙

实战演练-如何获取众筹项目的团队信息

Zipfile(一)

tabplot命令

Jupyter Notebook不为人知的秘密

字符串方法(三)

数据,我要“拷打”你

花式调用返回值 —— svret与storedresults
encode 和decode——带你探索编码与解码的世界
字符串方法(二)
如何快速生成分组变量?
用Stata实现数据标准化
字符串方法介绍
Stata16新功能之“框架”——frlink连接多个数据集(3)
Stata16新功能之“框架”——基础命令大合集(2)
三分钟教你读懂Python报错
解析XML文件
命令更新之reg2docx:将回归结果输出到word

关于我们

微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存