编程学习网 > 编程语言 > Python > Python math模块:90%的人只知道一半!
2026
04-17

Python math模块:90%的人只知道一半!


很多人用Python写数学计算,第一反应是import numpy。说实话,如果只是做点基础的数学运算,math模块完全够用,而且不用装第三方库,标准库自带,开箱即用。

先说结论

math模块是Python标准库里最被低估的模块之一。你日常需要的绝大多数数学函数,它都有。

基础函数:你以为你知道的那些

math.sqrt()开平方,math.pow(x, y)算幂,math.ceil()向上取整,math.floor()向下取整。这些太常见了,不多讲。

但有一个细节很多人不知道:math.ceil()和 math.floor()返回的是int类型,不是float。从Python 3开始改成这样了,之前返回的是float。如果你在类型敏感的代码里用,这个变化值得留意。

真正实用的进阶函数

math.isclose(a, b)是我觉得最有用的函数之一。浮点数比较是经典坑,0.1 + 0.2 == 0.3 在Python里返回False。用math.isclose(0.1 + 0.2, 0.3)就对了,它会考虑浮点精度误差,默认容差是1e-9。


math.prod()计算可迭代对象里所有元素的乘积。以前你得自己写循环或者用reduce,现在一行搞定。


math.gcd()和 math.lcm()算最大公约数和最小公倍数。数论相关的场景很实用,而且从Python 3.9开始支持多个参数,math.gcd(12, 18, 24)直接跑。

math.fsum()精确浮点求和。对精度要求高的场景,比如金融计算,用sum()会累积舍入误差,fsum()用高精度算法避免了这个问题。

常量和特殊值

math模块内置了math.pimath.e,精度足够日常使用。还有math.infmath.nan,做算法的时候当初始值或者标记值特别方便。比如求最小值的时候,初始值设为math.inf,比随便写个大数靠谱多了。

容易忽略的细节

第一个是阶乘math.factorial()只接受非负整数,传浮点数会报错。如果你不确定输入类型,先用int()转一下。

第二个是math.log()的底数。默认底数是e,也就是自然对数。

想算以2为底的对数,用math.log2()更精确,比math.log(x, 2)好,因为后者会有额外的精度损失。

第三个是角度和弧度的转换。math.radians()和 math.degrees()经常被忽略。很多人自己写* 3.14159 / 180,精度不够还容易写反。

什么时候该用什么

简单的数学运算,math模块就够。

涉及矩阵、向量、大批量数值计算,上numpy

需要符号计算,用sympy

math的定位很清楚:轻量、快速、够用。

写在最后

math库是标准库,不用装、不用配、不会版本冲突。下次遇到数学计算,先翻翻math模块,大概率不用装第三方库。

以上就是“Python math模块:90%的人只知道一半!的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取