3.9 闲聊数据类型
视频讲解
所谓闲聊,也称为gossip,就是一点小事可以聊上半天。下面就来聊一聊Python的数据类型。
在此之前可能已经听说过,Python的变量是没有类型的。对,没错,小甲鱼也曾经说过,Python的变量看起来更像是名字标签,想贴哪儿就贴哪儿。通过这个标签,就可以轻易找到变量在内存中对应的存放位置。
但这绝不是说Python就没有数据类型这回事儿,大家还记得'520'和520的区别吗?
没错,带了引号的,无论是双引号还是单引号或者是三引号,都是字符串;而不带引号的,就是数字。字符串相加称为拼接;数字相加就会得到两个数字的和:
>>> '520' + '1314' '5201314' >>> 520 + 1314 1834
Python有很多重要的数据类型,不过这里不会一下全都教给大家。因为肯定一时半会儿也没法强记那么多(填鸭式记忆也不牢靠);其次,现在所要实践的内容还不需要这么多的数据类型来配合。所以,控制好每个阶段所学习的内容都是能够用得上的,避免做无用功。
Python的字符串类型已经简单讲过,后面还会对字符串进行深入的探讨,所以大家别吐槽小甲鱼怎么都是浅尝辄止,没有那回事儿!我们只是分阶段逐步渗透,逐层进行消化,一下讲得太深入,大家消化不了,教学也会变成纯理论化(小甲鱼知道“死板”的模式是大家最讨厌的)。
下面介绍一些Python的数值类型,如整型、浮点型、布尔类型、复数类型等。
3.9.1 整型
整型说白了就是平时所见的整数,Python 3的整型已经与长整型进行了无缝结合,现在Python 3的整型类似于Java的BigInteger类型,它的长度不受限制,如果说非要有个限制,那只限于计算机的虚拟内存总数。
所以,使用Python 3可以很容易地进行大数运算:
>>> 149597870700 / 299792458 499.00478383615643
3.9.2 浮点型
浮点型就是平时所说的小数,例如,圆周率3.14就是一个浮点型数据,再例如地球到太阳的距离约1.5×108km,也是一个浮点型。Python区分整型和浮点型的唯一方式,就是看有没有小数点。
谈到浮点型,就不得不说一下E记法。E记法也就是平时所说的科学计数法,用于表示特别大和特别小的数。打个比方,如果给Python提供一个非常极端的数据,那么它可能会采用E记法来表示:
>>> a = 0.0000000000000000000025 >>> a 2.5e-21
对于地球到太阳的距离1.5×108km,如果转换成米(m)的话,那就是一个非常大的数了(150 000 000 000),但是如果用E记法就是1.5e11(大写的E或小写的e都可以)。
其实大家应该已经发现了,这个E的意思是指数,指底数为10,E后边的数字就是10的多少次幂。例如,15 000等于1.5×10 000,也就是1.5×104,E记法写成1.5e4。
3.9.3 布尔类型
都说“小孩才分对错,大人只看利弊”,其实计算机也有只讲对错的时候。在Python中,布尔类型只有True和False两种情况,也就是英文单词的“对”与“错”。
例如,1 + 1 > 3,我们都知道是错的,Python也知道:
>>> 1+1 > 3 False >>> 1+1 == 2 True
布尔类型事实上是特殊的整型,尽管布尔类型用True和False来表示“真”与“假”,但布尔类型可以当作整数来对待,True相当于整型值1,False相当于整型值0,因此下面这些运算都是可以的(最后的例子报错是因为False相当于0,而0不能作为除数)。
提示:
把布尔类型当成1和0来参与运算这种做法是不妥的,容易引起代码的混乱。
3.9.4 类型转换
接下来介绍几个与数据类型紧密相关的函数:int()、float()和str()。
int()的作用是将一个字符串或浮点数转换为一个整数:
>>> a = '520' >>> b = int(a) >>> a, b ('520', 520) >>> c = 5.99 >>> d = int(c) >>> c, d (5.99, 5)
注意:
如果是浮点数转换为整数,Python会采取“截断”处理,就是把小数点后的数据直接砍掉,而不是四舍五入。
float()的作用是将一个字符串或整数转换成一个浮点数(就是小数):
>>> a = '520' >>> b = float(a) >>> a, b ('520', 520.0) >>> c = 520 >>> d = float(c) >>> c, d (520, 520.0)
str()的作用是将一个数或任何其他类型转换成一个字符串:
>>> a = 5.99 >>> b = str(a) >>> b '5.99' >>> c = str(5e15) >>> c '5000000000000000.0'
3.9.5 获得关于类型的信息
有时候可能需要判断一个变量的数据类型,例如,程序需要从用户那里获取一个整数,但用户却输入了一个字符串,就有可能引发一些意想不到的错误或导致程序崩溃。
现在告诉大家一个好消息,Python其实提供了一个函数,可以明确告诉我们变量的类型,这就是type()函数:
>>> type('520') <class 'str'> >>> type(5.20) <class 'float'> >>> type(5e20) <class 'float'> >>> type(520) <class 'int'> >>> type(True) <class 'bool'>
当然,条条大路通罗马,还有别的方法也可以实现同样的效果。
查看Python的帮助文档,比起type()函数,更建议使用isinstance()这个BIF来判断变量的类型。
isinstance()函数有两个参数:第一个是待确定类型的数据;第二个是指定一个数据类型。它会根据两个参数返回一个布尔类型的值,True表示类型一致,False表示类型不一致。举个例子:
>>> a = "小甲鱼" >>> isinstance(a, str) True >>> isinstance(520, float) False >>> isinstance(520, int) True