Python3 基础数据类型-数值(int)类型
数值类型,Python支持三种不同的数字类型:整数、浮点数、复数。数字类型是不可变类型,意思是在系统中,类型的值发生了改变,那么就会生成一个全新的对象。对变量重新赋值一个数字类型,就会新建一个数字对象。
这里还要强调一下Python的变量和数据类型的关系。变量,只是对某个对象的代号,变量本身不存在数据类型的概念。
一、整数
在计算机语言中,整数一般称为整型,没有小数点,数值为正整数、负整数和0。在Python3中,整型可以当作Long类型直接使用,所以,Python3没有Python2的Long类型。
整型在表示数字的时候,通常使用十进制(decimal)表示。
特殊情况下,也会使用八进制(oct)和十六进(he x)制表示:
八进制用0o前缀和0-7表示,例如0o45
十六进制用0x前缀和0-9,a-f表示,例如:0xff00
>>> hex(11) # 10转16
'0xb'
>>> oct(11) # 10转8
'0o13'
>>> bin(11) # 10转2
'0b1011'
1.1 整数内存
Python的整数长度为32位,并且通常是连续分配的内存空间。
>>> id(-2)
1509059968
>>> id(-1)
1509060000
>>> id(-1)-id(-2)
32
备注:id()是用来查看内存地址
上面的例子中,连续定义的两个整型,它们的内存地址刚好相差32,说明:第一,整型的内存长度为32位;第二,它们通常hi连续分配空间的。
1.2 Python中的小整数对象池
Python初始化的时候会自动建立一个小整数对象池,这是一个包含262个指向整数对象的指针数组,数值范围是-5到256,为了方便我们调用,即我们在程序中自己没有定义或者创建,其实在Python中已经存在了。
那么问题来了,为什么要在这样?在编写程序的时候会很频繁的使用一些整数,如果每次要用到就创建,那么无疑会增加哼多内存开销。倒不如创建一个一直存在的,随用随取的小整数对象池这就是一个节省内存开销的最好办法了。
1.3 Python中的整数缓冲区
Python中除了内置初始化的小整数对象池之外,还有整数缓冲区。就是刚被删除的整数,它所占用的内存不会被真正删除回收,而是在后台缓冲一段时间,在次期间内可以再次被召回调用。
a = 100000
print(id(a))
del a
b = 100000
print(id(b))
--------------------
#输出:
3028842491600
3028842491600
上面的案例中,我给变量a赋值了整数100000,用id(a)查看内存地址为:3028842491600;在删除a变量后,定义了变量b,并赋值100000,查看内存地址依旧是:3028842491600;这就是整数缓冲区。
注意:这里用id()查看的地址,并不是在小整数对象池中,因为100000已经不在小整数对象池范围内了。还有,这个实验不能在交互环境中体现,可以使用pycharm中实验。
二、浮点数
浮点数也就是带小数点的数,如:1.2、3.1415、-0.6等等。对那些非常大或者非常小的浮点数,一般采用科学计数发表示,将10代替为e,如:1.23x10^9用科学计数法表示为1.23e9或者12.3e8,0.000012用科学计数法表示为1.2e5.
浮点数与整数之间的转换
>>> a = 1
>>> float(a) # 整数转为浮点
1.0
>>> b = 2.2
>>> int(b) # 浮点转为整数
2
三、复数
复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示,复数的实部a和虚部b都是浮点。
在Python中创建复数:
>>> a = 1
>>> b = 2
>>> complex(a,b) # a为实数部分,b为虚数部分
(1+2j)
四、数学计算
对于数学计算,除了简单的加减乘除,更多的科学计算需要导入math
这个库,它包含了绝大多数我们可能需要的科学计算函数,如下表:
math库的相关方法 | ||
1 | ceil(x) | 返回数字的上入整数,如math.ceil(4.1) 返回 5。 |
2 | exp(x) | 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045。 |
3 | fabs(x) | 返回数字的绝对值,如math.fabs(-10) 返回10.0。 |
4 | floor(x) | 返回数字的下舍整数,如math.floor(4.9)返回 4。 |
5 | log(x) | 如math.log(math.e)返回1.0,math.log(100,10)返回2.0。 |
6 | log10(x) | 返回以10为基数的x的对数,如math.log10(100)返回 2.0。 |
7 | modf(x) | 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。 |
8 | pow(x, y) | x**y 运算后的值。 |
9 | sqrt(x) | 返回数字x的平方根。 |
10 | acos(x) | 返回x的反余弦弧度值。 |
11 | asin(x) | 返回x的反正弦弧度值。 |
12 | atan(x) | 返回x的反正切弧度值。 |
13 | atan2(y, x) | 返回给定的 X 及 Y 坐标值的反正切值。 |
14 | cos(x) | 返回x的弧度的余弦值。 |
15 | hypot(x, y) | 返回欧几里德范数 sqrt(xx + yy)。 |
16 | sin(x) | 返回的x弧度的正弦值。 |
17 | tan(x) | 返回x弧度的正切值。 |
18 | degrees(x) | 将弧度转换为角度,如degrees(math.pi/2) , 返回90.0。 |
19 | radians(x) | 将角度转换为弧度。 |
应用举例:
import math
math.ceil(4.1) # 5 向上取整
math.floor(4.5) # 4 向下取整
math.pow(2,3) # 8.0 2的三次方
Python中常用的内置数学计算函数:
max(x1, x2,...) 返回给定参数的最大值,参数可以为序列。
min(x1, x2,...) 返回给定参数的最小值,参数可以为序列。
abs(x) 返回数字的绝对值,如abs(-10) 返回 10。
round(x [,n]) 返回浮点数x的四舍六入五成偶,如给出n值,则代表舍入到小数点后的位数。