1. 取整
  2. 绝对值
  3. 乘方和开平方
  4. 拆分
  5. 求和
  6. 求值
  7. 对数函数
  8. 特殊值判断
  9. 数学常量
  10. 三角函数

1. 取整

初学者一般都会把 int() 看成 Pyhton 内置的取整函数,因为用起来确实就像取整函数。然而,int() 的真正面貌是实例化了一个整型对象。


>>> a = int(1.9835)
>>> a
1
>>> print(type(a))
<class 'int'>

Python 中 int() 取整是比较直接的,小数点后面统统不要,很像楼下农创鲜超卖菜的阿姨,不足一元的零头都免了。math 模块给出了向上取整和向下取整两个函数。


>>> import math
>>> math.ceil(4.1) # 向上取整
5
>>> math.floor(3.9) # 向下取整
3

以及一个直接获取整数部分的函数。


>>> import math
>>> math.trunc(3.14159265358979) # 取整
3

遗憾的是,math 模块没有四舍五入的函数。不过没关系,Python 内置函数 round() 处理四舍五入已经足够完美了。


>>> round(3.5847) # 精确到个位
4
>>> round(3.5847, 2) # 保留小数点后2位
3.58
>>> round(3.5847, 3) # 保留小数点后3位
3.585

2. 绝对值

Python 本身内置了绝对值函数 abs(),而 math 模块也提供了绝对值函数 math.fabs()。两者的区别需要注意:


  • abs() 返回的数据类型视参数而定,若参数是整数,则返回整数,否则返回浮点数  
  • math.fabs() 返回的数据类型为浮点数
>>> abs(-5.7) # 内置函数 abs()
5.7
>>> abs(-5) # 内置函数 abs()
5
>>> math.fabs(-5.7)
5.7
>>> math.fabs(-5)
5.0

3. 乘方和开平方

虽说 Python 的 ** 运算符和内置函数 pow() 也支持乘方运算,但显然不如 math 模块中的同名函数规范和严谨。


>>> import math
>>> 5**0.5
2.23606797749979
>>> 2**0.5 
1.4142135623730951
>>> pow(5, 2) # 内置函数 pow() 
25
>>> pow(5, 0.5) # 内置函数 pow()
2.23606797749979
>>> math.pow(5, 2) # 5的2次方
25.0
>>> math.pow(5, 0.5) # 5的0.5次方
2.23606797749979
>>> math.sqrt(5) # 5的开方
2.23606797749979

除此之外,math还包含了一个算术平方和的平方根计算函数。


>>> import math
>>> math.hypot(3, 4) # 3、4平方之和的开方
5.0

4. 拆分

拆分函数主要有两个,一个是 modf(),一个是copysign()。前者负责拆分一个参数的整数部分和小数部分,拼接成一个元组;后者负责拆分一个参数的正负值附加给另一个参数。


>>> import math
>>> math.modf(5.56) # 拆分整数和小数部分,组成元组
(0.5599999999999996, 5.0)
>>> math.modf(math.pi) 
(0.14159265358979312, 3.0)
>>> math.copysign(2, -3) # -3的负号给予2
-2.0
>>> math.copysign(-2, 3) # 3的正负值给予-2
2.0

在进阶拆分中,math模块下的frexp()函数可以拆分尾数和指数。


>>> import math
>>> math.frexp(75) # 0.5859375乘以2的7次方,等于75
(0.5859375, 7)

5. 求和

关于求和,Python对应的内嵌函数为 sum(),math模块则提供了fsum() 。


  • sum() 返回的数据类型视参数而定,若至少有一个参数是浮点数,则返回浮点数,否则返回整数
  • math.fsum() 返回的数据类型为浮点数
>>> import math
>>> sum([1, 4, 5, 7]) # 计算迭代对象内的元素之和
17             
>>> sum((1, 4.0, 5, 7))      
17.0
>>> math.fsum([1, 4, 5, 7]) # 结果始终为浮点数
17.0

6. 求值

math模块下自带了几个用于直接做数学计算的求值函数,通过它们可以快速求得最大公约数、阶乘、余数以及逆运算


>>> import math
>>> math.gcd(9, 6) # 计算9和6的最大公约数(整数)
3             
>>> math.factorial(4) # 计算4的阶乘(整数)      
24
>>> math.fmod(17, 9) # 计算A除以B的余数(浮点数)
8.0
>>> math.ldexp(2, 10) # 结果为A乘以2的B次方(浮点数)
2048.0

7. 对数函数

math模块下的对数函数可以根据是否需要自定义底数来选择:


  • 自定义底数函数为log();
  • 固定底数为10或者2的对应函数为log10()和log2()。
>>> import math
>>> math.log(1024, 2) # 计算以2为底,1024的对数
10.0 
>>> math.log(math.e) # 若不指定基数,默认常数e为基数      
1.0
>>> math.log1p(math.e-1)  # 返回参数+1的对数
1.0
>>> math.log10(100) # 固定底数为10
2.0
>>> math.log2(64) # 固定底数为2
6.0

8. 特殊值判断

特殊值是Python中的一种特殊参数,常见的特殊值为:


  • 无穷大 ‘Inf’
  • 非数字 ‘nan’
>>> import math
>>> math.isfinite(0.1) # 判断是否为无穷大,不是返回True
True
>>> math.isfinite(float('Inf'))
False
>>> math.isinf(math.e) # 判断是否为无穷大,是返回True
False
>>> math.isinf(float('Inf'))
True
>>> math.isnan(float('nan')) # 判断是否为非数字,是返回True
True
>>> math.isnan(18) 
False

9. 数学常量

math 模块下的数学常量,常用的为三个:


  • math.pi     # 圆周率
  • math.e      # 自然对数
  • math.nan  # 非数字

在Python中做数学计算时,可直接使用封装好的常量


>>> import math
>>> math.pi
3.141592653589793
>>> math.e
2.718281828459045
>>> math.nan
nan

>>> math.exp(2) # 返回常数e的n次方
7.38905609893065
>>> math.expm1(2) # 返回常数e的n次方-1
6.38905609893065

10. 三角函数

math 模块下的三角函数非常详细,不妨来看一下他们的功能:-- 弧度求弦值


>>> import math
>>> math.sin(math.pi/2)      # 返回正弦值
1.0
>>> math.cos(math.pi)        # 返回余弦值
-1.0
>>> math.tan(2/math.pi)      # 返回正切值
0.7393029504866041

-- 弦值求弧度


>>> import math
>>> math.acos(-1)       # 返回反余弦弧度值
3.141592653589793
>>> math.asin(1)        # 返回反正弦弧度值
1.5707963267948966
>>> math.atan(2)        # 返回反正切弧度值
1.1071487177940904
>>> math.atan2(1, 3)    # 返回xy坐标值的反正切值
0.3217505543966422

--双曲弦函数


>>> import math
>>> math.sinh(2)        # 返回双曲正弦弧度值
3.6268604078470186
>>> math.asinh(1)       # 返回反双曲正弦弧度值
1.4436354751788103
>>> math.cosh(2)        # 返回双曲余弦弧度值
3.7621956910836314
>>> math.acosh(2)       # 返回反双曲余弦弧度值
1.3169578969248166
>>> math.tanh(0.7)      # 返回双曲正切弧度值
0.6043677771171635
>>> math.atanh(0.7)     # 返回反双曲正切弧度值
0.8673005276940532

-- 弧度\角度互换


>>> import math
>>> math.degrees(math.pi/2)    # 输入弧度返回对应角度
90.0
>>> math.radians(180)          # 输入角度返回对应弧度
3.141592653589793