Python 的标准函数“math”提供了许多常用的数学函数,例如三角函数、四舍五入、指数、对数、平方根、总和等,都可以通过 math 标准函数来进行运算下方列出几种 math 模块常用的方法,要使用 math 必须先 import math 模块,或使用 from 的方式,单独 import 特定的模块。
import mathfrom math import sin
math.pi 使用后会返回 圆周率 的数学常数,math.e 使用后会返回 指数 的数学常数(常数表示固定不变的数字)。
import mathprint(math.pi) # 3.141592653589793print(math.e) # 2.718281828459045
math.ceil(x) 使用后会将小数点后方的数字,无条件进位到整数,以下方的程序为例,圆周率 3.14159 无条件进位后就等于 4(单纯四舍五入可使用内置函数 round,参考:round(x, y))。
import mathpi = math.piprint(math.ceil(pi)) # 4
math.floor(x) 使用后会将小数点后方的数字,无条件舍去到整数,以下方的程序为例,圆周率 3.14159 无条件舍去后就等于 3(单纯四舍五入可使用内置函数 round,参考:round(x, y))。
import mathpi = math.piprint(math.floor(pi)) # 3
math.copysign(x, y) 使用后,会 根据 y 的正负符号,改变「x 绝对值」之后正负值。
import mathprint(math.copysign(10, -5)) # -10print(math.copysign(-10, 9)) # 10print(math.copysign(-10, -3)) # -10
math.fabs(x) 使用后会 返回 x 的绝对值,计算结果以浮点数 float 格式呈现。
import mathprint(math.fabs(-10)) # 10.0
math.fmod(x, y) 使用后会返回 x 除以 y 的余数,计算结果以浮点数 float 格式呈现,如果要返回整数,可使用 Python 数学计算 x % y 的语法。
import mathprint(math.fmod(7,3)) # 1.0
math.fsum(iter) 使用后会 返回串列或 tuple 里的数值加总,计算结果以浮点数 float 格式呈现。
import mathprint(math.fsum([1,2,3,4,5])) # 15.0print(math.fsum((1,2,3,4,5))) # 15.0
math.gcd(x, y) 使用后会返回 x 和 y 的最大公约数(同时可以整除 x 和 y 的最大整数)。
import mathprint(math.gcd(18,12)) # 6
math.pow(x, y) 会返回 x 的 y 次方,计算结果以浮点数 float 格式呈现(如果需要整数,可参考内置函数 pow(x, y, z))。
import mathprint(math.pow(2, 5)) # 32.0
math.sqrt(x) 会返回 x 的平方根,计算结果以浮点数 float 格式呈现。
import mathprint(math.sqrt(16)) # 4.0
math.factorial(x) 会 返回 x 的阶乘(x!),x 只能使用正整数。
import mathprint(math.factorial(5)) # 120 ( 5x4x3x2x1=120 )
math.degrees(x) 将 x 弧度转换为角度,math.radians(x) 将 x 角度转换为弧度。
import mathprint(math.radians(30)) # 0.5235987755982988print(math.degrees(0.5236)) # 30.0000701530499
math.sin(x) 返回 x 弧度的正弦值,math.cos(x) 返回 x 弧度的余弦值,math.tan(x) 返回 x 弧度的正切值(1 弧度等于 180 度/π)。
import mathr = math.radians(30) # 将 30 度转换为弧度print(math.sin(r)) # 0.49999999999999994print(math.cos(r)) # 0.8660254037844387print(math.tan(r)) # 0.5773502691896257
math.asin(x) 返回 x 弧度的反正弦值,math.acos(x) 返回 x 弧度的反余弦值,math.atan(x) 返回 x 弧度的反正切值(1 弧度等于 180 度/π)。
import mathr = math.radians(30) # 将 30 度转换为弧度print(math.asin(r)) # 0.5510695830994463print(math.acos(r)) # 1.0197267436954502print(math.atan(r)) # 0.48234790710102493
math.exp(x) 会返回 e 常数的 x 次方。
import mathprint(math.exp(2)) # 7.38905609893065
math.log 相关的模块,可以返回对应的自然对数。
自然对数模块说明math.log(x)返回 x 的自然对数(底为 e)math.log(x, base)返回 log(x)/log(base)math.log1p(x)返回 1+x 的自然对数(底为 e)math.log2(x)返回 x 以 2 为底的自然对数math.log10(x)返回 x 以 10 为底的自然对数
import mathprint(math.log(10)) # 2.302585092994046print(math.log(10,3)) # 2.095903274289385print(math.log1p(10)) # 2.3978952727983707print(math.log2(10)) # 3.321928094887362print(math.log10(10)) # 1.0
math.isclose 可以根据 判断 x 和 y 是否够接近,「够接近」的定义在于 x 和 y 的差异是否大于某个数值,如果够接近就返回 True,否则返回 False。
下面的例子,在没有设定 rel_tol 和 abs_tol 参数的状况下,除非 x 和 y 相等,否则都是「不够接近」。
import mathprint(math.isclose(3.14, 3.14)) # Trueprint(math.isclose(3.14000, 3.14001)) # False
rel_tol 参数定义「相对的接近范围」,公式为 「 x 和 y 的最大值乘以 rel_tol」,下方的例子,10 和 5 的接近范围最大是 10x0.5=5,因此如果 10-4 比 5 大,就会返回 False (不接近),同理,10 和 20 的接近范围最大会是 20x0.5=10,如果 20-9 比 10 大,就会返回 False。
import mathprint(math.isclose(10, 5, rel_tol=0.5)) # Trueprint(math.isclose(10, 4, rel_tol=0.5)) # Falseprint(math.isclose(20, 10, rel_tol=0.5)) # Trueprint(math.isclose(20, 9, rel_tol=0.5)) # False
abs_tol 参数定义「绝对的接近范围」,公式为 「 x-y 的绝对值」,下方的例子,10.4-10=0.4,0.4 小于 abs_tol 定义的 0.5,表示接近,返回 True。
import mathprint(math.isclose(10, 10.4, abs_tol=0.5)) # True 0.4<0.5print(math.isclose(10, 10.6, abs_tol=0.5)) # False 0.6>0.5
math.isfinite(x) 和 math.isinf(x) 能判断 x 是否为无限大的数字,返回 True 或 False。
import matha = float('inf')print(math.isfinite(a)) # False a 是无限大,返回 Falseprint(math.isinf(a)) # True a 是无限大,返回 true
math.isnan(x) 能判断 x 是否为 NaN (非数字),返回 True 或 False。
import matha = float('nan')print(math.isnan(a)) # Trueprint(math.isnan(123)) # False