1.3 常用数学函数和运算优先级

在数学之中,除了加减乘除四则运算之外(这是小学数学),还有其他更多的运算,比如乘方、开方、对数运算等,要实现这些运算,需要用到Python中的一个模块:math。

1.3.1 使用math模块

math模块是Python标准库中的,所以不用安装就可以直接使用。使用方法是:

  1. >>> import math

用import就将math模块引用过来了,下面就可以使用这个模块提供的工具了。比如,要得到圆周率:

  1. >>> math.pi
  2. 3.141592653589793

这个模块都能做哪些事情呢?可以用下面的方法看到:

  1. >>> dir(math)
  2. ['__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是一个非常周到的“姑娘”,她早就提供了一个命令,让我们来查看每个函数的使用方法。

  1. >>> help(math.pow)

在交互模式下输入上面的指令,然后回车,看到下面的信息:

  1. Help on built-in function pow in module math:
  2. pow(...)
  3. pow(x, y)
  4. 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次方。

  1. >>> 4 ** 2
  2. 16
  3. >>> math.pow(4,2)
  4. 16.0
  5. >>> 4 * 2
  6. 8

特别注意,4*2和42是有很大区别的。

用help()函数,可以查看math模块中任何一个函数的使用方法。

下面是几个常用的math模块中函数举例,你可以结合自己调试的进行比照。

  1. >>> math.sqrt(9)
  2. 3.0
  3. >>> math.floor(3.14)
  4. 3.0
  5. >>> math.floor(3.92)
  6. 3.0
  7. >>> math.fabs(-2) #等价于abs(-2)
  8. 2.0
  9. >>> abs(-2)
  10. 2
  11. >>> math.fmod(5,3) #等价于5%3
  12. 2.0
  13. >>> 5 % 3
  14. 2

在上面的内容中,读者除了要了解math模块外,还要体会对后续学习非常有帮助的内建函数dir()和help()。

1.3.2 两个函数

下面两个也是常用的数学函数。

1.求绝对值

  1. >>> abs(10)
  2. 10
  3. >>> abs(-10)
  4. 10
  5. >>> abs(-1.2)
  6. 1.2

2.四舍五入

  1. >>> round(1.234)
  2. 1.0
  3. >>> round(1.234, 2)

如果不清楚这个函数的用法,可以使用下面的方法看帮助信息。

  1. >>> help(round)
  2. Help on built-in function round in module __builtin__:
  3. round(...)
  4. round(number[, ndigits]) -> floating point number
  5. Round a number to a given precision in decimal digits (default 0 digits).
  6. This always returns a floating point number. Precision may be negative.

1.3.3 运算优先级

从小学数学开始,就研究运算优先级的问题,比如在四则运算中“先乘除,后加减”,说明乘法和除法的优先级要高于加法和减法。对于同一级别的,就按照“从左到右”的顺序进行计算。

下面的表格中列出了Python中的各种运算的优先级顺序。不过,就一般情况而言,不需要记忆,完全可以按照数学中的运算规则去理解,因为人类既然已经发明了数学,在计算机中进行的运算就不需要重新编写一套新规范了,只需要符合数学中的运算规则即可。

在此读者只需要看个大概、有个印象即可,可以一边向后阅读,一边回来翻阅,或者在用到的时候来这里查看。如表1-1所示。

表1-1 运算规则1.3 常用数学函数和运算优先级 - 图1

最后要提及的是运算中的绝杀:括号。只要有括号,就先计算括号里面的。这是数学中的共识,无需解释。