
2.4 数字和运算符
本节主要讲解的是Python中的数字类型及相关运算符,下面将会详细介绍主流的数字类型,以及适用的各种操作符,最后介绍用于处理数字的内建函数。
2.4.1 数和四则运算
在Python中,对数的规定比较简单,不涉及算法的话,基本在中学的数学水平即可理解。我们已经了解了给变量赋值,并不是把数值直接赋给变量,而是把存放数值的地址赋给了变量。这么说太抽象了,让我们用案例来验证一下,这里要使用一个新的函数id,这个函数可以用来查看每个对象的内存地址。
例2-24 变量的地址


由此可见,id(abc)和id(2)的结果都是1551513872,由此验证了前面的推论,赋值操作只是传递了保存数字的内存地址而不是数字本身。可能有人会觉得这种传值方法太麻烦了,直接把数字传给变量多简单,何需内存地址这个中介来帮忙?其实,这种设计是非常巧妙的,它形成了一个非常重要的Python语言特性——数据有类型,变量无类型。
通俗点讲就是两点:第一,方便内存管理;第二,弱化了变量的类型声明。
注意,在有些资料或者书籍上会把传递内存地址这种方法称为引用或者指针,其实它们表达的都是同一种东西。
2.4.2 关于数字的内建函数
大家都知道在数学计算中,除了加减乘除四则运算之外,还存在其他的运算方法,比如乘方、开方、对数运算等。这些Python肯定也能够处理,但要实现这些运算方法,需要用到Python中的一个模块:math。math模块是标准库中的内置模块,可以直接使用,不用安装。
例2-25 圆周率

这里应该是我们第一次接触到“模块”这个概念。模块相当于一个工具箱,里面的函数相当于扳手、钳子之类的工具,import就是打开工具箱的钥匙,每次使用模块之前都要用import来导入模块。对于使用者而言,工具箱里面到底放了些什么东西他是不知道的,但是可以用某些方法查看模块中所包含的工具,这个就是dir函数。
例2-26 查看math的函数

在math模块中,可以计算正弦sin(a)、余弦cos(a)、开方sqrt(a)等。既然看到了工具箱子中的工具,我们随便找一个函数来用用看,因为实践是检验真理的唯一标准。下面选一个函数pow,用help函数查看函数的用法,然后验证。
例2-27 验证pow的用法

例2-28 求绝对值

例2-29 四舍五入

例2-30 int、float、complex转换函数

除了math模块,在Python标准库中还有不少专门用于处理数值类型的模块,它们增强并扩展了数值运算的功能,比如后面会介绍的著名的第三方模块NumPy和SciPy。