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.地板除:操作符 // 执行一个地板除操作,不论操作数是何种类型,都将舍去小数部分,返回数字序列中比真正的商小的最接近的数字。

取余操作中,如果操作数是浮点型,商取小于等于精确值的最大整形的乘积之差(书上原话,有点拗口,不太理解):

而幂操作等操作符,以及各操作符之间的优先级,和数学中的习惯都是一致的。

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的规则似乎有点不同:

以上左图使用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类也不能解决:

相关模块

针对科学计算的模块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():随机返回给定序列的一个元素。

Python学习_02_数字和运算的更多相关文章

  1. python学习之数字

    数字python中的数字比较典型,典型在可以表示很小的数,也可以表示很大的数,c语言的数字类型如果表示很大的数的话,可能会报溢出错误,但是python不会,python 数字类型的完整工具包括整数和浮 ...

  2. Python学习笔记---数 数据类型 运算

    python的四种数类型: 整数 int 浮点型 float 布尔 boolen 复数 complex >>> type(5)<class 'int'>>>& ...

  3. Mooc中国大学Python学习笔记--数字类型及操作

    整数类型 只需知道整数无限制,pow(),4进制表示形式 与数学中整数的概念一致 --可正可负,没有取值范限制 --pow(x,y)函数:计算x^y,想算多大算多大 -十进制:10 -二进制,以0b或 ...

  4. python学习之数据类型与运算符号

    python版本:3.6 python编辑器:pycharm 最新版本 整理成代码如下: #!/usr/bin/env python #-*- coding: utf-8 -*- # 数学操作符 pr ...

  5. Python学习笔记-数字,列表,元祖,切片,循环

    数字 1,加减乘除:+,-,*,/ 2,平方:** 3,立方:**3 4,字符串转换:str(数字) 5,浮点数:带小数点  0.2 Python编程建议 import this >>&g ...

  6. Python学习之--数字转人民币读法(解决问题的方法很重要)

    效果图: 实现代码: money = float(input("Please input the money:"))cop = int(money)Num = ['零','壹',' ...

  7. [Python学习笔记] 数字类型及操作

    数字类型 整数类型 十进制:1110,-123 二进制:以0B或0b开头 0b110,-0B101 八进制:以0O或0o开头 0o123,-0O567 十六进制:以0X或0x开头 0x555,-0X8 ...

  8. Python学习笔记-数字类型

    如何定义一个数字类型 定义var1为一个INT类型,所以在5/3 输出的是 1. var1 = 5 var1=var1/3 print var1 定义var1为一个INT类型,因为var1是INT类型 ...

  9. Python学习-猜数字游戏

    菩萨蛮·黄鹤楼 茫茫九派流中国,沉沉一线穿南北.烟雨莽苍苍,龟蛇锁大江. 黄鹤知何去,剩有游人处.把酒酹滔滔,心潮逐浪高! --coding:UTF-8-- import random secret ...

随机推荐

  1. 分布式监控系统Zabbix3.2对数据库的连接数预警

    在前篇分布式监控系统Zabbix3.2监控数据库的连接数 中已经对数据库的端口3306进行了监控,可以看到数据库的连接数历史变化有高有低,那如果达到了数据库连接数的阀值是不是主动通知给运维人员去检查问 ...

  2. 【NOIP2012提高组】借教室

    90分暴力解法: 用线段树,初始值为该天的教室数,每个人来申请的时候在这段区间减去借走的数,然后查询最小值是否小于0,是就输出-1,否则继续. (其实在vijos是可以直接A的,他们的评测机太快了) ...

  3. Codeforces 558E A Simple Task

    题意:给定一个字符串,以及m次操作,每次操作对字符串的一个子区间进行升序或降序排序,求m次操作后的串 考虑桶排,发现线段树可以模拟桶排的过程,所以对26个字母分别建立线段树即可 #include< ...

  4. labview生成可执行文件

    labview生成可执行文件可以分为两种情况. 第一种,是电脑中有labview软件开发环境的情况 第二种,是电脑中没有安装labview软件开发环境 下面是一个简单的labview代码: 程序解释: ...

  5. HTML,CSS学习笔记

    <p>元素,代表是一个段落,单独另起一行</p> <h1>的意思就是主标题</h1> <h1><h2><h3>... ...

  6. day6、Linux下如何找出7天以前的文件删除

    有些时候,由于系统产生的日志文件,使服务器的磁盘空间紧张,所以怎么删除7天以前的日志文件及让系统只保留7天以内的日志文件 方法一 使用命令:find + |xargs + ls 命令方法:find / ...

  7. window.setInterval与window.setTimeout使用实例

    <script type="text/javascript"> var arrived = false; var num = 0; var timer = window ...

  8. 20150605面试汇总--js与java的差别

    javascript与java都是编程语言,不同在于代码格式不同. js基于对象,java是面向对象: java是强变量.编译前必须作出声明.js是弱变量,使用前不需做声明: JavaScript 是 ...

  9. C++、Objective-C 混合编程

    在XCODE中想使用C++代码,你须要把文件的扩展名从.m改成.mm.这样才会启动g++编译器. 我们来看个測试代码: [java] view plaincopy class TestC { priv ...

  10. exports 和 module.exports

    首先参考一个js的示例 app.js var a = {name: 'nswbmw 1'}; var b = a; console.log(a); console.log(b); b.name = ' ...