零基础入门学习Python(第2版)
上QQ阅读APP看书,第一时间看更新

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