Python的math模块中的常用数学函数整理


Posted in Python onFebruary 04, 2016

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

模块(module)是 Python 中非常重要的东西,你可以把它理解为 Python 的扩展工具。换言之,Python 默认情况下提供了一些可用的东西,但是这些默认情况下提供的还远远不能满足编程实践的需要,于是就有人专门制作了另外一些工具。这些工具被称之为“模块”

任何一个 Pythoner 都可以编写模块,并且把这些模块放到网上供他人来使用。

当安装好 Python 之后,就有一些模块默认安装了,这个称之为“标准库”,“标准库”中的模块不需要安装,就可以直接使用。

如果没有纳入标准库的模块,需要安装之后才能使用。模块的安装方法,我特别推荐使用 pip 来安装。这里仅仅提一下,后面会专门进行讲述,性急的看官可以自己 google。
使用 math 模块
math 模块是标准库中的,所以不用安装,可以直接使用。使用方法是:

>>> 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(a),cos(a),sqrt(a)......

这些我们称之为函数,也就是在模块 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 函数的使用方法和相关说明。

第一行意思是说这里是 math 模块的内建函数 pow 帮助信息(所谓 built-in,称之为内建函数,是说这个函数是 Python 默认就有的)
第三行,表示这个函数的参数,有两个,也是函数的调用方式
第四行,是对函数的说明,返回 x**y 的结果,并且在后面解释了 x**y 的含义。
最后,按 q 键返回到 Python 交互模式
从上面看到了一个额外的信息,就是 pow 函数和 x**y 是等效的,都是计算 x 的 y 次方。

>>> 4**2
16
>>> math.pow(4,2)
16.0
>>> 4*2
8

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

用类似的方法,可以查看 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

几个常见函数
有几个常用的函数,列一下,如果记不住也不要紧,知道有这些就好了,用的时候就 google。

求绝对值

>>> abs(10)
10
>>> abs(-10)
10
>>> abs(-1.2)
1.2

四舍五入

>>> round(1.234)
1.0
>>> round(1.234,2)
1.23

>>> # 如果不清楚这个函数的用法,可以使用下面方法看帮助信息
>>> 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.

运算优先级
从小学数学开始,就研究运算优先级的问题,比如四则运算中“先乘除,后加减”,说明乘法、除法的优先级要高于加减。

对于同一级别的,就按照“从左到右”的顺序进行计算。

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

运算符 描述
lambda Lambda 表达式
or 布尔“或”
and 布尔“与”
not x 布尔“非”
in,not in 成员测试
is,is not 同一性测试
,>=,!=,== 比较
| 按位或
^ 按位异或
& 按位与
> 移位
+,- 加法与减法
*,/,% 乘法、除法与取余
+x,-x 正负号
~x 按位翻转
** 指数
x.attribute 属性参考
x[index] 下标
x[index:index] 寻址段
f(arguments...) 函数调用
(experession,...) 绑定或元组显示
[expression,...] 列表显示
{key:datum,...} 字典显示
'expression,...' 字符串转换

上面的表格将 Python 中用到的与运算符有关的都列出来了,是按照从低到高的顺序列出的。虽然有很多还不知道是怎么回事,不过先列出来,等以后用到了,还可以回来查看。

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

Python 相关文章推荐
Python中用于检查英文字母大写的isupper()方法
May 19 Python
python中的字典使用分享
Jul 31 Python
python基于pyDes库实现des加密的方法
Apr 29 Python
Python3实现发送QQ邮件功能(附件)
Dec 23 Python
pycharm运行和调试不显示结果的解决方法
Nov 30 Python
python paramiko利用sftp上传目录到远程的实例
Jan 03 Python
pytorch 实现tensor与numpy数组转换
Dec 27 Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
Jan 20 Python
Python设计密码强度校验程序
Jul 30 Python
Django+Django-Celery+Celery的整合实战
Jan 20 Python
Jupyter notebook 不自动弹出网页的解决方案
May 21 Python
Python OpenCV之常用滤波器使用详解
Apr 07 Python
详解Python编程中基本的数学计算使用
Feb 04 #Python
Python连接mysql数据库的正确姿势
Feb 03 #Python
Python内建数据结构详解
Feb 03 #Python
Python解析树及树的遍历
Feb 03 #Python
Python实现二叉堆
Feb 03 #Python
Python实现二叉搜索树
Feb 03 #Python
Python的组合模式与责任链模式编程示例
Feb 02 #Python
You might like
非常不错的MySQL优化的8条经验
2008/03/24 PHP
php保存二进制原始数据为图片的程序代码
2014/10/14 PHP
PHP使用ffmpeg给视频增加字幕显示的方法
2015/03/12 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
Thinkphp自定义生成缩略图尺寸的方法
2019/08/05 PHP
响应鼠标变换表格背景或者颜色的代码
2009/03/30 Javascript
JavaScript 解析读取XML文档 实例代码
2009/07/07 Javascript
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
js 模式窗口(模式对话框和非模式对话框)的使用介绍
2014/07/17 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
javascript实现2016新年版日历
2016/01/25 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
2016/07/21 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
Vuex之理解Mutations的用法实例
2017/04/19 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
Vue导出页面为PDF格式的实现思路
2018/07/31 Javascript
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现对比不同字体中的同一字符的显示效果
2015/04/23 Python
Python3中在Anaconda环境下安装basemap包
2018/10/21 Python
django的ORM模型的实现原理
2019/03/04 Python
基于Django静态资源部署404的解决方法
2019/07/28 Python
Python的互斥锁与信号量详解
2019/09/12 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
详解CSS3伸缩布局盒模型Flex布局
2018/08/20 HTML / CSS
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
Shell脚本如何向终端输出信息
2014/04/25 面试题
公积金转移接收函
2014/01/11 职场文书
小学校园广播稿集锦
2014/10/04 职场文书
安全保证书格式
2015/02/28 职场文书
初一英语教学反思
2016/02/15 职场文书