Python教程-数字类型

数字类型
数字类型是不可变的。不可变类型意味着一旦值发生变化,就会创建一个全新的对象。数字1和2分别代表两个不同的对象,当我们重新给变量赋值一个数字类型时,将会创建一个新的数字对象。
需要强调的是,Python中变量与数据类型之间的关系,变量只是对某个对象的引用或称为别名、名称等。变量本身并没有数据类型的概念。只有像1、[2, 3, 4]、"haha"这样的对象才具有数据类型。
例如:
a = 1 # 创建一个数字对象1,并将其赋值给变量a
a = 2 # 创建一个数字对象2,并将其赋值给变量a,此时变量a不再指向数字对象1
在这个例子中,发生变化的是变量a的指向,而不是数字对象1变成了数字对象2。初学者可能会感到困惑,但不用担心,我们会努力理解这个概念。
Python支持三种不同的数字类型:整数(Int)、浮点数(Float)和复数(Complex):
1. 整数(Int):
通常被称为整型,表示正或负的整数,没有小数点。在Python 3中,整数类型可以作为长整型(Long)使用,因此Python 3没有Python 2中的长整型。
例如:1、100、-8080、0等。
在表示数字时,有时我们会使用八进制或十六进制:
- 十六进制使用0x前缀和0-9、a-f表示,例如:0xff00、0xa5b4c3d2。
- 八进制使用0o前缀和0-7表示,例如0o12。
Python的整数长度为32位,并且通常在内存中是连续分配的。
>>> id(-2)
1868280800
>>> id(-1)
1868280832
>>> id(0)
1868280864
>>> id(1)
1868280896
>>> id(2)
1868280928
从上面的空间地址看,地址之间正好差32。为什么会这样?因为Python在初始化环境的时候就在内存里自动划分了一块空间,专门用于整数对象的存取。当然,这块空间也不是无限大小的,能保存的整数是有限的,所以你会看到id(0)和id(10000)之间的地址差别很大。
>>> id(0)
1456976928
>>> id(10000)
45818192
小整数对象池:
Python在初始化时会自动创建一个小整数对象池,用于方便调用,避免重复创建。这个对象池是一个包含262个指向整数对象的指针数组,范围从-5到256。这意味着对于这个范围内的整数,即使我们在程序中没有显式创建,Python在后台已经为我们创建了对应的对象。
为什么要这样做呢?我们都知道,在程序运行过程中,包括Python自身的运行环境中,会频繁使用这个范围内的整数。如果每次需要使用一个整数时都去创建一个新的对象,那么会增加很多开销。因此,创建一个小整数对象池,其中的整数对象一直存在,不会销毁,并且可以随时使用,这是一种非常高效的做法。
接下来,让我们来验证一下小整数对象池的存在。
>>> id(-6)
45818128
>>> id(-5)
1456976768
>>> id(-4)
1456976800
>>> id(255)
1456985088
>>> id(256)
1456985120
>>> id(257)
45818128
从id(-6)和id(257)的地址,我们能看出小整数对象池的范围,正好是-5到256。
除了小整数对象池,Python还有整数缓冲区的概念,也就是刚被删除的整数,不会被真正立刻删除回收,而是在后台缓冲一段时间,等待下一次的可能调用。
>>> a = 1000000
>>> id(a)
45818160
>>> del a # 删除变量a
>>> b = 1000000
>>> id(b)
45818160
函数 | 返回值 ( 描述 ) |
---|---|
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) | 将角度转换为弧度 |
以及两个数学常量:
常量 | 描述 |
---|---|
pi | 数学常量 pi(圆周率,一般以π来表示) |
e | 数学常量 e,e即自然常数(自然常数)。 |
下面是一些应用展示,注意最后的角度调用方式:
>>> math.log(2)
0.6931471805599453
>>> math.cos(30)
0.15425144988758405
>>> math.cos(60)
-0.9524129804151563
>>> math.sin(30)
-0.9880316240928618
>>> math.sin(math.degrees(30))
-0.4097717985741408
>>> math.sin(math.radians(30))
0.49999999999999994