数据类型是一种编程语言的重要组成部分。Python 内置的基本数据类型主要有:Number(数值)、Bool(布尔)、String(字符串)、List(列表)、Tuple(元组)、Set(集合)、Dictionary(字典)等。本节教程先对Number类型进行讲解,Bool 布尔类型下节介绍。
Python 3.X 中的 Number 类型包括 int(整型)、float(浮点型)和 complex (复数)三种。通常,定义数值型变量并赋值可以一步完成,例如:
在 Python 环境中可以使用以下代码查看当前计算机可以使用的 int 类型的最大值:
上述代码在 Windows 7 SP1 和 MacOS HighSierra 10.13.3 上的运行结果如下所示:
需要注意的是,在 Python 2.X 中使用 sys.maxint 来查看当前计算机可以使用的 int 类型的最大值。
Python 的 float 类型浮点数用机器上浮点数的本机双精度(64bit)表示。和 C语言的 Double 类型相同,float 类型提供大约 17 位的精度以及从 -308 到 308 的指数。Python 不支持 32 位的单精度浮点数。如果程序需要精确控制区间和数字精度,可以考虑使用 numpy 模块。在 Python 3.X 中浮点数默认是 17 位精度。
关于单精度和双精度:C语言中浮点型分为单精度和双精度两种。单精度使用 float 定义,双精度使用 double 定义。在 Turbo C 中单精度型占 4 个字节(32 位)内存空间,其数值范围为 3.4×10-38~3.4×1038,只能提供七位有效数字。双精度型占 8 个字节(64 位)内存空间,其数值范围为 1.7×10-308~1.7×10308,可提供 16 位有效数字。
int 型和 float 型数值可以直接进行加减乘除、乘方和取余等运算,例如:
上述代码的运行结果如下所示:
需要注意的是,单除号/除法总是返回一个浮点数,要获取整数结果应使用双除号//操作符。在混合计算时,Python 会将整数转换成为浮点数。
在实际工作中会遇到需要使用更高精度(超过 17 位小数)的情况,可以使用 decimal 模块,配合 getcontext( ) 函数使用。例如:
上述代码执行结果如下所示:
在具体工作中,很多时候需要将精度高的 float 型数值转换为精度低的数值,通俗来说就是“四舍五入”,舍弃小数点右边的部分数据。在 Python 中通常使用内置的 round( ) 函数完成,例如执行:
将得到结果“2”。但 round( ) 函数对于内置的数据类型而言,执行结果往往并不像所期待的那样,如果只有一个数作为参数,当不指定位数的时候,返回的是一个整数,而且是最靠近的整数(类似四舍五入)。
但是当出现“.5”的时候,两边的距离都一样,round( ) 取靠近的偶数。例如执行:
上述代码执行结果为:
对于指定保留小数位数的情况,如果要舍弃的部分最左侧是“5”,且“5”左侧是奇数则直接舍弃,若“5”左侧是偶数则向上取整,例如执行:
上述代码的运行结果为:
除了 round( ) 函数,math 模块中的 ceil( ) 和 floor( ) 函数也可以实现向上或向下取整。例如:
上述代码的运行结果下所示:
Python 使用 complex( ) 函数创建复数。其参数可以接受数值或字符串,例如:
上述代码的运行结果为:
第二个参数不能传入字符串。当希望从一个字符串的复数形式转换复数时,需要注意的是字符串中不能出现空格,比如可以写成:
而不能写成
或
否则会返回 ValueError 异常。