Python基础及应用
上QQ阅读APP看书,第一时间看更新

2.1 常用数值类型

新建并打开一个Jupyter Notebook文件,我们随意输入一些表达式:

可以看到Out就是表达式的结果,这跟在第1章做过的事情没有什么区别,接下来我们看看这个过程背后的知识有哪些。

如果仔细观察会发现,上面的运算中出现了整数和小数。当然从数学的角度来说它们都是实数完全没有区别,但是计算机只能处理离散有限的数据,小数因为有可能无限长,所以精度不可能无限高,而整数只要空间足够总能表示出精确值,因此整数和实数应该是两种不同的类型。

数学中的实数在计算机领域一般用“浮点数”来表达,从字面上理解就是小数点位置可变的小数,也就是说浮点数的整数部分和小数部分的位数是不固定的,当然也有位数固定的定点数,不过定点数实际上就是整数除以2的幂而已。

所以Python实际上有三种内置的数值类型,分别是整型(integer)、浮点数(float)和复数(complex)。此外还有一种特殊的类型叫布尔类型(bool)。这些数据类型都是Python的基本数据类型。

2.1.1 整型(integer)

从数学的角度来说,整型就是整数,下面叙述的过程中也不再严格区分这两种说法。

一般来说一个整数占用的内存空间是固定的,所以范围一般是固定的,比如在C++中一个int在32位平台上占用4个字节也就是32位,表示整数的范围是-2147483648~2147483647,如果溢出了就会损失精度。当然有人会说只要位数随着输入动态变化不就解决了,但是事实上动态变化总是伴随着代价的,所以C++为了高效选择的是静态分配空间。不过Python从易用性出发选择的是动态分配空间,所以Python的整数是没有范围的,这跟数学中的概念是完全一致的,只要是整数运算,总可以确信结果不会溢出,从而一定是正确的。

所以我们可以随意地进行一些整数运算,比如:

当然提到整数就不得不提到进制转换,我们首先看看不同进制的数字在Python中是怎么表示的:

但是如果数值并不由我们输入,怎么转换呢?Python提供了一些方便的内置函数:

注意这里hex( )、oct( )、bin( )、int( )都是函数,括号内用逗号隔开的是参数,虽然还没有介绍Python的函数,但是这里完全可以当作数学中函数的形式来理解,此外用单引号或者双引号括起来的"0xA""0b111"表示的是字符串,后面也会介绍。这里有一个细节是hex( )、oct( )、bin( )返回的都是字符串,而int( )返回的是一个整数。

此外要注意的是,进制只改变数字的表达形式,并不改变其大小。

2.1.2 浮点型(float)

在Python中输入浮点数的方法有以下几种:

要注意的是Python中的浮点数精度是有限的,也就是说有效数字位数不是无限的,所以浮点数过大会引起上溢出为+inf或-inf,过小则会引起下溢出为0.0。同时浮点数的表示支持科学计数法,可以用e或E加上指数来表示,比如2.5e10就表示2.5∗1010

2.1.3 复数类型(complex)

Python内置了对复数类型的支持,对于科学计算来说是非常方便的。Python中输入复数的方法为“实部+虚部j”,注意与数学中常用i来表示复数单位不同,Python使用j来表示,比如:

这里要强调的一点是,如果想创建一个虚部为0的复数,一定要指定虚部为0,不然得到的会是一个整型。

2.1.4 布尔型(bool)

布尔型是一种特殊的数值,它只有两种值,分别是TrueFalse。注意这里要大写首字母,因为Python是大小写敏感的语言。在下面讲解二元运算符的时候,我们会看到布尔型的用法和意义。