数字类型

数字类型是不可变的。不可变类型意味着一旦值发生变化,就会创建一个全新的对象。数字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

标签: python, python下载, Python教程, Python技术, Python学习, Python学习教程, Python语言, Python开发, Python入门教程, Python进阶教程, Python高级教程, Python面试题, Python笔试题, Python编程思想