#8 Python数学方法
前言
前几节了解了Python的不同数据类型,有小伙伴会问,不同的数据类型之间是否可以相互转换?肯定是可以的,本篇博文主要记录数字类型的转换,其他类型的相互转换会在下几节记录,Here we go!
一、Python数字类型转换
通过前几节,我们知道Python数字的数据类型有:整型、长整型、浮点型、和复数,它们之间是如何转换的呢?亦或者它们是如何转换为其他数据类型呢?先来看所有的方法:
int(x [,base ]) # 将 x 转换为一个整数
float(x ) # 将 x 转换到一个浮点数
complex(real [,imag ]) # 创建一个复数
str(x ) # 将对象 x 转换为字符串
repr(x ) # 将对象 x 转换为表达式字符串
eval(str ) # 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s ) # 将序列 s 转换为一个元组
list(s ) # 将序列 s 转换为一个列表
chr(x ) # 将一个整数转换为一个字符
ord(x ) # 将一个字符转换为它的整数值
hex(x ) # 将一个整数转换为一个十六进制字符串
oct(x ) # 将一个整数转换为一个八进制字符串
bin(x) # 将一个整数转换为一个二进制字符串
我们先来申明一个变量 num1 = 6 ,之后用 type() 函数查看其数据类型,任何数据类型都可以用此函数查看:
In [103]: num1 = 6 In [104]: type(num1)
Out[104]: int
可以看到 num1 默认是 int 类型的,再来创建 num2 = 6.6 ,再次查看其数据类型:
In [105]: num2 = 6.6 In [106]: type(num2)
Out[106]: float
可以看到 num2 默认是 float 类型的,也就是说,当在Python中创建一个整数的时候,默认的数据类型为 int ,创建一个小数的时候,默认的数据类型是 float ,创建完后想要修改其数据类型就要用到上面的类型转换函数了
In [110]: float(num1)
Out[110]: 6.0
int 转换为 float
In [114]: int(6.6)
Out[114]: 6 In [115]: int(-5.5)
Out[115]: -5 # int函数会把小数位全部抹去,保留整数部分
float 转换为 int
In [116]: complex(5,8)
Out[116]: (5+8j) # complex(实部,虚部),虚部可以省略
创建复数
In [117]: str(5)
Out[117]: '' In [118]: str(6.6)
Out[118]: '6.6'
数字转换为字符串
In [123]: s = 'print("Hello,world!")'
In [124]: s
Out[124]: 'print("Hello,world!")'
In [125]: eval(s)
Hello,world!
# 可以看到将字符串执行了
执行字符串的有效表达式
In [130]: tuple([1,2,3])
Out[130]: (1, 2, 3)
列表转换为元组
In [139]: chr(56)
Out[139]: '' # 这里涉及ASC码的内容
整数转换为字符
In [142]: ord('')
Out[142]: 56
# 这里涉及ASC码的内容
字符转换为整数
In [143]: hex(15)
Out[143]: '0xf' # 十六进制的数以 0x 开头
整数转换为十六进制
In [144]: oct(20)
Out[144]: '0o24' # 八进制以 0o 开头
整数转换为八进制
In [145]: bin(5)
Out[145]: '0b101' # 二进制以 0b 开头
整数转化为二进制
二、Python数学方法
说起数学方法,肯定不再是简单的加减乘除乘方等基础运算了,数学方法更多是取绝对值、指数运算、对数运算、幂运算,开方运算以及三角函数等,这些方法涉及到的领域也是相当广阔,这部分也是非常重要的,每个人都应该熟练应用,尤其是想要去做数据方面工作的小伙伴。
math模块和cmath模块
Python中大量的数学方法并没有在内置函数中,而是在两个模块中,在使用数学方法之前,必须在Python程序中根据需要导入math模块或者cmath模块。math模块的对象主要是实数,cmath模块主要面向复数,二者包含的方法基本一致,根据实际使用需求导入即可,导入方法:
import math
回车以后如何没有任何报错信息就证明导入成功了,关于模块的详细概念会在之后的一节专门讲到,这里就先导入使用,不去做太多的解释。
导入以后,可以查看其帮助信息,还记得 help() 函数吗:
In [146]: import math In [147]: help(math)
Help on built-in module math: NAME
math DESCRIPTION
This module is always available. It provides access to the
mathematical functions defined by the C standard. FUNCTIONS
acos(...)
acos(x) Return the arc cosine (measured in radians) of x. acosh(...)
acosh(x) Return the inverse hyperbolic cosine of x. asin(...)
asin(x) Return the arc sine (measured in radians) of x. -- More --
可以看到 math 模块的帮助信息很全很复杂,一页都展示不完(--- More ---),可以按空格健翻页或者回车键翻一行,Q键退出;如果只是想要快速查看其包含的方法,可以用 dir() 函数:
In [148]: dir(math)
Out[148]:
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
In [149]: import cmath In [150]: dir(cmath)
Out[150]:
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'isclose', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh']
可以看到math模块和cmath模块都有大量的方法,并且二者方法基本上一样,接下来,以math模块为例,详细的介绍其包含的方法
想要查看模块里面具体方法的帮助信息时,可以用 help() 函数查看:
In [173]: help(math.exp) # 注意是 math.exp, 不是 math.exp()
Help on built-in function exp in module math: exp(...)
exp(x) Return e raised to the power of x.
注意:查看具体方法时,只写方法名称即可,不要加括号,否则会报错!
数学函数
abs(x) # 返回数字的绝对值,如abs(-10) 返回 10
math.ceil(x) # 返回数字的上入整数,如math.ceil(4.1) 返回 5
cmp(x, y) # 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
math.exp(x) # 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
math.fabs(x) # 返回数字的绝对值,如math.fabs(-10) 返回10.0
math.floor(x) # 返回数字的下舍整数,如math.floor(4.9)返回 4
math.log(x) # 如math.log(math.e)返回1.0,math.log(100,10)返回2.0
math.log10(x) # 返回以10为基数的x的对数,如math.log10(100)返回 2.0
max(x1, x2,...) # 返回给定参数的最大值,参数可以为序列。
min(x1, x2,...) # 返回给定参数的最小值,参数可以为序列。
math.modf(x) # 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。
math.pow(x, y) # x**y 运算后的值。
round(x [,n]) # 返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。
math.sqrt(x) # 返回数字x的平方根
可以看到,上面有些方法是直接写出的,如 abs(x) ,而有一些方法前面有 math. ,如 math.exp(x),这其实是有原因的,直接写出的表示是系统内置函数,不用导入任何模块就可以使用,而加前缀的表示这个方法是这个模块里面的,必须加前缀,否者会报错,任何模块里面的方法都要加上这个模块的前缀,例如:
In [159]: import math In [160]: exp(2)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-160-840a487878a2> in <module>
----> 1 exp(2) NameError: name 'exp' is not defined # 不加前缀表示这个方法没有被定义 In [161]: math.exp(2) # 加上前缀就可以正常使用了
Out[161]: 7.38905609893065
上面的方法就不一一举例了,要注意 round(x) ,这个函数执行原理是:四舍六入五凑偶,小数位为5的时候要看前一位,前一位是偶数就舍弃,是奇数就进一
三角函数
math.acos(x) # 返回x的反余弦弧度值。
math.asin(x) # 返回x的反正弦弧度值。
math.atan(x) # 返回x的反正切弧度值。
math.atan2(y, x) # 返回给定的 X 及 Y 坐标值的反正切值。
math.cos(x) # 返回x的弧度的余弦值。
math.hypot(x, y) # 返回欧几里德范数 math.sqrt(x*x + y*y)。
math.sin(x) # 返回的x弧度的正弦值。
math.tan(x) # 返回x弧度的正切值。
math.degrees(x) # 将弧度转换为角度,如math.degrees(math.pi/2) , 返回90.0
math.radians(x) # 将角度转换为弧度
可以看到涉及三角函数的方法都在 math 模块里面
数字常量
math.pi # 数学常量 pi(圆周率,一般以π来表示)
math.e # 数学常量 e,e即自然常数(自然常数)。
两个最常见的数字常量,圆周率 pi 和自然常数 e 也在 math 模块里面
In [164]: math.pi
Out[164]: 3.141592653589793 In [165]: math.e
Out[165]: 2.718281828459045
随机数函数
随机函数常作为随机数发生器使用,大量领域会用到随机数,Python的随机数基本上都在 random模块中,具体方法如下:
In [171]: import random In [172]: dir(random)
Out[172]:
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_BuiltinMethodType', '_MethodType', '_Sequence', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_acos', '_ceil', '_cos', '_e', '_exp', '_inst', '_log', '_pi', '_random', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
其主要函数功能:
random.choice(seq) # 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
random.randrange ([start,] stop [,step]) # 从指定范围内,按指定基数递增的集合中获取一个随机数,基数缺省值为1
random.random() # 随机生成下一个实数,它在[0,1)范围内。
random.seed([x]) # 改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。
random.shuffle(lst) # 将序列的所有元素随机排序
random.uniform(x, y) # 随机生成下一个实数,它在[x,y]范围内。
#8 Python数学方法的更多相关文章
- Python join() 方法与os.path.join()的区别
Python join() 方法与os.path.join()的区别 pythonJoinos.path.join 今天工作中用到python的join方法,有点分不太清楚join() 方法与os.p ...
- (转)Python数学函数
原文:https://www.cnblogs.com/lpl1/p/7793645.html PYTHON-基础-内置函数小结----------http://www.wklken.me/posts/ ...
- 1. Python 魔法方法
Python 魔法方法 基础: 如果你想... 所以,你写... Python调用... 初始化一个实例 x = MyClass() x.__init__() 作为一个字符串的"官方&quo ...
- python数学工具(一)
python 数学工具包括: 1.函数的逼近 1.1.回归 1.2.插值 2.凸优化3.积分4.符号数学 本文介绍函数的逼近的回归方法 1.作为基函数的单项式 对函数 的拟合 首先定义函数并且可视化 ...
- Python数学建模-01.新手必读
Python 完全可以满足数学建模的需要. Python 是数学建模的最佳选择之一,而且在其它工作中也无所不能. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数学 ...
- Python数学建模-02.数据导入
数据导入是所有数模编程的第一步,比你想象的更重要. 先要学会一种未必最佳,但是通用.安全.简单.好学的方法. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数据导入 ...
- Python swapcase()方法
首先,要明白Python swapcase() 方法用于对字符串的大小写字母进行转换. 其次,了解swapcase()方法语法:str.swapcase() 返回值:返回大小写字母转换后生成的新字符串 ...
- python字符串方法的简单使用
学习python字符串方法的使用,对书中列举的每种方法都做一个试用,将结果记录,方便以后查询. (1) s.capitalize() ;功能:返回字符串的的副本,并将首字母大写.使用如下: >& ...
- Python数学函数
1.Python数学函数 1.abs(x):取绝对值,内建函数 2.math.ceil(x):向上取整,在math模块中 3.cmp(x,y):如果 x < y ,返回-1:如果 x == y ...
随机推荐
- zeromq学习记录(四)使用ZMQ_ROUTER ZMQ_DEALER
/************************************************************** 技术博客 http://www.cnblogs.com/itdef/ ...
- Linux环境下java开发环境搭建一 JDK搭建
第一步:下载jdk压缩文件 第二步:上传到家目录下的soft目录下,可以采用winscp,此处下载的是.tar.gz文件 第三步:解压压缩文件,并在/usr/local目录下创建一个jdk7的目录,并 ...
- Servlet执行流程和生命周期
Servlet执行流程 Get方式请求HelloServlet ---> <a href="servlet/HelloServlet"> ↓ 服务器在配置文档中查 ...
- Linux 第四天
1.文件搜索命令 1)locate 在文件资料库中查找文件(需要文件资料库中有,新建的文件查不到,需要手动更新,updatedb.查不到/tmp目录下的文件) 语法:locate 文件名 常用选项: ...
- Log4J日志整合及配置详解
Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻松 ...
- Codeforces Round #547 (Div. 3) F 贪心 + 离散化
https://codeforces.com/contest/1141/problem/F2 题意 一个大小为n的数组a[],问最多有多少个不相交的区间和相等 题解 离散化用值来做,贪心选择较前的区间 ...
- linux 基础 文件系统 用户权限
描述Linux系统的启动过程? 1.开机自检 BIOS 2.MBR引导 3.GRUB菜单 4.加载内核 5.运行init进程 6.从/etc/inittab读取运行级别 7.根据/etc/rc.sys ...
- 为opencv添加contrib库
自从进入3.X时代以后,OpenCV将代码库分成了两部分,分别是稳定的核心功能库和试验性质的contrib库,之前已经讲过opencv的核心库的安装,现在讲解一下其附带的依赖库的安装. 一.Cmake ...
- Centos7中docker开启远程访问
在作为docker远程服务的centos7机器中配置: 1.在/usr/lib/systemd/system/docker.service,配置远程访问.主要是在[Service]这个部分,加上下面两 ...
- 分布式系统中 Unique ID 的生成方法
http://darktea.github.io/notes/2013/12/08/Unique-ID Snowflake 生成的 unique ID 的组成 (由高位到低位): 41 bits: T ...