设为首页 收藏本站
查看: 954|回复: 0

[经验分享] Python学习_02_数字和运算

[复制链接]

尚未签到

发表于 2015-12-2 08:18:24 | 显示全部楼层 |阅读模式
  python具有强大的科学运算功能,python由于支持更加强大的面向对象和动态特性,相比R语言、matlab、mathmatic等传统的科学计算工具具有非常大的优势。
Python的数字
  python中的数字提供了标量的存储和直接访问,并且是不可更改的类型,对数字的更改实际上是创建了一个新的数字对象,而原来的数字对象当其引用次数为0时,会被垃圾回收机制回收,通过del 关键字可以删除一个对象的引用。
  布尔类型:在python2.3之后开始支持,布尔类型只有两个值:True和False。
  整形、长整形:python中的整形大小取决于系统的数据带宽,如32系统最大支持2^32-1,和C语言中的长整形类似,而python中的长整形则取决于运行机器的虚拟内存。python的长整形后面会有L标识,在python2.2之后,python的长整形和整形逐渐统一为一种,并且能够自动转换。
  浮点型:python中的浮点型类似于C语言中的double,是双精度浮点型,每个浮点型占8个字节(64位),并且遵守IEEE754号规范:52M/11E/1S,52个位用于表示底,11位用于表示指数,一个位用于表示符号。根据运行的机器不同可能会有所不同。
  复数类型:python中内建有复数的类型,一个复数表示为real+imagj的形式,虚数的部分必须有后缀j或者J,虚数不能单独存在,他总是和一个值为0.0的实数部分一起构成一个复数。复数的实数和虚数部分都是浮点类型。复数包含两个内建属性和一个内建方法:num.real、num.imag、num.conjugate(),其中conjugate()方法返回该复数的共轭复数。
python的操作符
  python的操作符工作时,必须保证两个操作数是同一类型,如果不是同一类型,则会按照以下的逻辑进行转换:
  1.如果有一个操作数是复数,则另外一个操作数也转换为复数
2.否则,如果一个操作数是浮点型,则另外一个操作数也转换为浮点型
3.否则,如果一个操作数是长整形,则另外一个操作数也转换为长整形
4.否则,两者都是普通整形,无需转换
  python中+、-、*、/、%等和其他语言无异,实际上就是实现__add__(),__sub__(),__mul__(),__div__()等方法。python中的幂操作符为**,并且添加了新的整除操作: // 。为了科学计算的需要,python的除法也分为好几种:
  1.传统除法:当两个操作数都是整数时,执行整数除法,返回一个整形,如果其中之一是浮点数,按照转换逻辑另外一个操作数也是或者被转换为浮点数,执行浮点除法。这个规则在python3之后有所改变,在python3中,不论两个操作数是否都是整形,都将执行真正的除法,而原来的整数除法需要利用地板除操作:// 来完成。
  2.真正的除法:在python3之后,/ 操作符将执行真正的除法,而在python2中,如果想要运行真正的除法,则需要通过执行 from __future__ import division指令来做到这一点。
  3.地板除:操作符 // 执行一个地板除操作,不论操作数是何种类型,都将舍去小数部分,返回数字序列中比真正的商小的最接近的数字。
  取余操作中,如果操作数是浮点型,商取小于等于精确值的最大整形的乘积之差(书上原话,有点拗口,不太理解):
DSC0000.png
  而幂操作等操作符,以及各操作符之间的优先级,和数学中的习惯都是一致的。
  python同时还具有位操作符:~、&、|、^、<<、>>等,用于支持二进制运算。
数值运算的内建函数
  1.工厂函数:由于python对类和类型的整合,python中的数值类型转换函数就是对应类的工厂函数。当调用float()函数将一个整数转换为浮点型时,实际上的工作是创建一个float类的实力对象。
  2.功能函数:abs()、coerce()、divmod()、pow()、round()等:
  abs():返回给定参数的绝对值,如果是复数,则返回距离原点的距离。
  coerce():将传入的参数按照转换逻辑转换成统一的类型,并返回转换完毕的两个数值的元组。
  divmod():除法和取余的结合,返回一个元组,包括商和余数。
  pow():pow()函数进行指数运算,并且可以接受第三个参数做取余操作,pow(x,y,z)的效率会比pow(x,y)%z的效率要高,在密码运算中这个特性会被用到。
  round():按照四舍五入的规则进行取整。python2和python3的规则似乎有点不同:
DSC0001.png DSC0002.png
  以上左图使用python3的idle运行结果,右图使用python2.7.9在脚本中执行结果,由于没有安装python2的idle,暂时不做细究。
  对比round(),int()函数直接截去小数部分,floor()函数则返回最接近原数但是小于原数的整形。
  python针对整形提供转换函数:hex()、oct()、ord()、chr()、unichr()分别返回十六进制整形、八进制整形、给定字符的ASCII码、给定ASCII码的字符、给定Unicode码的字符
  工厂函数其实就是__init__()方法的调用
Python中的布尔数
  python中的布尔数是整形的子类,True和False对应于整形的1和0,python中的布尔型具有以下特点:
  1.有两个永不改变的值:True和False
2.布尔型是整形的子类,但是不能再被继承而生成他的子类
3.没有__nonzero__()方法的对象默认是True
4.对于值为零的任何数字或空集:空列表、空元组、空字典等的布尔值都是False
5.可以进行数学运算,且在运算中对应整数1和0
  取一个对象的布尔值实际上是执行该对象的__nonzero()__方法,若该对象没有__nonzero()__方法,如:
  class C: pass
c = C()
  c是通过工厂函数创建的C类的一个实例 ,在C类中并没有__nonzero()__方法,所以bool(c)返回True值,由于Class类也没有__nonzero()__方法,所以bool(C)同样返回True值。
十进制浮点型
  在python2.4之前,由于浮点型遵循的IEEE754规范,显示的时候使用二进制52位表示底,一些简单的十进制浮点型,比如0.1在二进制浮点型中将显示为0.10000000001或者0.9999999999等,在python2.4之后,十进制浮点型成为python的特性,但是在做浮点型取余操作时,任然会出现类似的问题,尽管加入Decimal类也不能解决:
DSC0003.png
相关模块
  针对科学计算的模块NumPy、SciPy包含很多高级的数字科学计算内容,一些其他的数字相关模块,如decimal、array、math/cmath、operator、random等模块对数字计算进行扩展。
  random模块中包含多个伪随机数的发生器:
  randint():在两个整形参数中返回二者之间的随机整形
  randrange():随机返回range([start,]stop[,step])结果中的一项,如randrange(1,10,2)
  uniform():和randint类似,但是返回二者之间的浮点数(开区间)
  random():类似于uniform,但是上限恒等于1.0,下限恒等于0.0
  choice():随机返回给定序列的一个元素。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-146058-1-1.html 上篇帖子: 递归小例子的python语言实现 下篇帖子: Python 开源异步并发框架的未来
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表