1.3 常用数学函数和运算优先级
在数学之中,除了加减乘除四则运算之外(这是小学数学),还有其他更多的运算,比如乘方、开方、对数运算等,要实现这些运算,需要用到Python中的一个模块:math。
1.3.1 使用math模块
math模块是Python标准库中的,所以不用安装就可以直接使用。使用方法是:
- >>> import math
用import就将math模块引用过来了,下面就可以使用这个模块提供的工具了。比如,要得到圆周率:
- >>> math.pi
- 3.141592653589793
这个模块都能做哪些事情呢?可以用下面的方法看到:
- >>> dir(math)
- ['__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
dir(module)是一个非常有用的指令,可以通过它查看任何模块中所包含的工具。从上面的列表中就可以看出,在math模块中,可以计算正弦sin()、余弦cos()、开平方0sqrt()等函数。
这些函数是math中提供的,不需要我们编写,可以拿过来就用。比如计算乘方,可以使用pow函数。但是,怎么用呢?
Python是一个非常周到的“姑娘”,她早就提供了一个命令,让我们来查看每个函数的使用方法。
- >>> help(math.pow)
在交互模式下输入上面的指令,然后回车,看到下面的信息:
- Help on built-in function pow in module math:
- pow(...)
- pow(x, y)
- Return x**y (x to the power of y).
这里非常清楚地告诉了我们math中的pow函数的使用方法和相关说明。
由于是第一次用到help(),有必要将结果详细解释一番。
1)第一行意思是说这里是math模块的内建函数pow的帮助信息(built-in称之为内建函数,是说这个函数是Python默认的)。
2)第三行表示这个函数的参数,有两个,也是函数的调用方式。
3)第四行是对函数的说明,返回xy的结果,并且在后面解释了xy的含义。
最后,按q键返回到Python交互模式。
当然,也看到了一个额外的信息,就是pow函数和x**y是等效的,都是计算x的y次方。
- >>> 4 ** 2
- 16
- >>> math.pow(4,2)
- 16.0
- >>> 4 * 2
- 8
特别注意,4*2和42是有很大区别的。
用help()函数,可以查看math模块中任何一个函数的使用方法。
下面是几个常用的math模块中函数举例,你可以结合自己调试的进行比照。
- >>> math.sqrt(9)
- 3.0
- >>> math.floor(3.14)
- 3.0
- >>> math.floor(3.92)
- 3.0
- >>> math.fabs(-2) #等价于abs(-2)
- 2.0
- >>> abs(-2)
- 2
- >>> math.fmod(5,3) #等价于5%3
- 2.0
- >>> 5 % 3
- 2
在上面的内容中,读者除了要了解math模块外,还要体会对后续学习非常有帮助的内建函数dir()和help()。
1.3.2 两个函数
下面两个也是常用的数学函数。
1.求绝对值
- >>> abs(10)
- 10
- >>> abs(-10)
- 10
- >>> abs(-1.2)
- 1.2
2.四舍五入
- >>> round(1.234)
- 1.0
- >>> round(1.234, 2)
如果不清楚这个函数的用法,可以使用下面的方法看帮助信息。
- >>> help(round)
- Help on built-in function round in module __builtin__:
- round(...)
- round(number[, ndigits]) -> floating point number
- Round a number to a given precision in decimal digits (default 0 digits).
- This always returns a floating point number. Precision may be negative.
1.3.3 运算优先级
从小学数学开始,就研究运算优先级的问题,比如在四则运算中“先乘除,后加减”,说明乘法和除法的优先级要高于加法和减法。对于同一级别的,就按照“从左到右”的顺序进行计算。
下面的表格中列出了Python中的各种运算的优先级顺序。不过,就一般情况而言,不需要记忆,完全可以按照数学中的运算规则去理解,因为人类既然已经发明了数学,在计算机中进行的运算就不需要重新编写一套新规范了,只需要符合数学中的运算规则即可。
在此读者只需要看个大概、有个印象即可,可以一边向后阅读,一边回来翻阅,或者在用到的时候来这里查看。如表1-1所示。
表1-1 运算规则
最后要提及的是运算中的绝杀:括号。只要有括号,就先计算括号里面的。这是数学中的共识,无需解释。