Python数据类型-2 数字类型
数字类型
数字类型是不可变类型。所谓的不可变类型,指的是类型的值一旦有不同了,那么它就是一个全新的对象。数字1和2分别代表两个不同的对象,对变量重新赋值一个数字类型,会新建一个数字对象。
还是要强调一下Python的变量和数据类型的关系,变量只是对某个对象的引用或者说代号、名字、调用等等,变量本身没有数据类型的概念 。只有1,[1,2],"hello"这一类对象才具有数据类型的概念。
Python 支持三种不同的数字类型,整数、浮点数和复数。
整数
通常被称为整型,数值为正或者负,不带小数点。python 3的整型可以当做Long类型使用,所以python 3 没有python 2的Long类型。
表示数字的时候,有时我们还会用八进制或十六进制来表示:
十六进制用0x前缀和0-9,a-f表示,例如:0xff00
八进制用0o前缀和0-7表示,例如0o45
python的整数长度为16,32位,并且通常是连续分配内存空间的。
id(-2) 505205760 id(-1) 505205776
从上面的空间地址看,地址之间正好差16,32。
小整数对象池
python初始化的时候会自动建立一个小整数对象池,方便我们调用,避免后期重复生成!这是一个包含262个指向整数对象的指针数组,范围是-5到256。也就是说比如整数10,即使我们在程序里没有创建它,其实在Python后台已经悄悄为我们创建了。
为什么要这样呢?我们都知道,在程序运行时,包括Python后台自己的运行环境中,会频繁使用这一范围内的整数,如果每需要一个,你就创建一个,那么无疑会增加很多开销。创建一个一直存在,永不销毁,随用随拿的小整数对象池,无疑是个比较实惠的做法。
id(-6) 10114720 id(-5) 496751568 id(255) 496755728
从id(-6)和id(257)的地址,我们能看出小整数对象池的范围,正好是-5到256。
除了小整数对象池,Python还有整数缓冲区的概念,也就是刚被删除的整数,不会被真正立刻删除回收,而是在后台缓冲一段时间,等待下一次的可能调用。
a = 100 id(a) 503175776 del a # 删除变量a b = 100 id(b) 503175776 a = 10;print(id(a));del a;b = 10;print(id(b)) # 在Python交互环境中不能实现。
上面,我给变量a赋值了整数100,看了一下它的内存地址。然后我把a删了,又创建个新变量b,依然赋值为100,再次看下b的内存地址,和以前a存在的是一样的。
浮点数
浮点数也就是小数,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,一般用科学计数法表示,把10用e替代,1.23x10^9就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。
复数(complex)
复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示,复数的实部a和虚部b都是浮点。
数字类型转换
在某些特定的情况下,我们需要对数字的类型进行转换。python为我们提供了内置的数据类型转换函数。
int(x) 将x转换为一个整数。如果x是一个浮点数,则截取小数部分 float(x) 将x转换成一个浮点数 complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。 complex(x, y): 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。
转换过程中如果出现无法转换的对象,则会抛出异常,比如int("haha")
数学计算
对于数学计算,除了前面提到过的简单的加减乘除等等,更多的科学计算需要导入math这个库,它包含了绝大多数我们可能需要的科学计算函数,如下表
函数 返回值 ( 描述 ) abs(x) 返回数字的绝对值,如abs(-10) 返回 10 ceil(x) 返回数字的上入整数,如math.ceil(4.1) 返回 5 exp(x) 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045 fabs(x) 返回数字的绝对值,如math.fabs(-10) 返回10.0 floor(x) 返回数字的下舍整数,如math.floor(4.9)返回 4 log(x) 如math.log(math.e)返回1.0,math.log(100,10)返回2.0 log10(x) 返回以10为基数的x的对数,如math.log10(100)返回 2.0 max(x1, x2,...) 返回给定参数的最大值,参数可以为序列。 min(x1, x2,...) 返回给定参数的最小值,参数可以为序列。 modf(x) 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。 pow(x, y) x**y 运算后的值。 round(x [,n]) 返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。 sqrt(x) 返回数字x的平方根 acos(x) 返回x的反余弦弧度值。 asin(x) 返回x的反正弦弧度值。 atan(x) 返回x的反正切弧度值。 atan2(y, x) 返回给定的 X 及 Y 坐标值的反正切值。 cos(x) 返回x的弧度的余弦值。 hypot(x, y) 返回欧几里德范数 sqrt(xx + yy) sin(x) 返回的x弧度的正弦值。 tan(x) 返回x弧度的正切值。 degrees(x) 将弧度转换为角度,如degrees(math.pi/2) , 返回90.0 radians(x) 将角度转换为弧度