Python3有六个标准数据类型:
.不可变数据类型:Number(数字)、String(字符串)、Tuple(元组)
.可变数据类型: List(列表)、Dictionary(字典)、Set(集合)
在每种基本数据类型下会有其它一些衍生类型。以上六种是基本的数据类型,除基本数据类型外,其它数据类型有:Datetime(时间)、Calendar(日历)、Collection(容器)、enum(枚举)等。
该篇讲述Number(数字)的各种类型、衍生类型Decimal类型和Fractions类型的适用情况以及针对数据类型的运算规则。
Number:
Python3 支持int、float、bool、complext、Decimal、Fraction 等数值类型,数值类型可以直接进行+、-、*、/
运算,()
用于分组。内置函数type()
和isinstance()
可以查看变量所指的对象类型,适用于所有的数据类型,两者的区别是type()
不认为子类是父类类型 isinstance()
认为子类是父类类型。
int(整数)
整数(例如4,5,6
)类型为int 类型,Python3之后只有一种整数类型int,表示长整型,不再有之前的long类型。在Python2中用数字0表示False
,用数字1表示True
,但是Python3 中直接把True
和False
定义为关键字,其值还是表示0和1。布尔值属于整数的子类型,整数具有无限的精度。
>>> a = 1; b=2
>>> isinstance(a, int)
True
>>> type(b)
<class 'int'>
#以上两个函数同样适用于其它Number类型以及String等
整数类型附加方法
int 类型实现了numbers.Integral
abstract base class,也提供了其他方法
bit_length()
int.bit_length()
返回以二进制表示一个整数所需要的位数,不包括符号位和前面的零
>>> a = -13
>>>#转换成二进制
>>> bin(a)
'-0b1101'
>>> a.bit_length()
4
如果a的值为0,则bit_length(
)函数返回0,如果a的值不为0,则bit_length()
是使得2**(k-1) <= abs(x)< 2 **k
的 唯一正整数k,同样abs(a)小到足以具有正确的舍入对数时,则k = 1 + int(log(abs(x),2))
。
等价于:
>>> def bit_length(self):
s = bin(self) #将整数转换为二进制
s = s.lstrip('-0b') #将二进制的前缀去掉
return len(s) #返回二进制位的长度
to_bytes()
int.to_bytes(length, byteorder, *,signed=False)返回一个整数的字节数组,是Python3.1新增加的功能
参数含义:
length: 整数字节数,如果不能用给定的字节数来表示则会引发OverflowError
byteorder: 确定用于表示整数的字节顺序,byteorder为’big’表示最高位字节放在字节位开头。byteorder为’little’表示最高位字节放在字节数组的末尾。
signed: 是否使用二进制补码来表示整数,如果signed为False并且给出的是负整数,则会引发OverflowError
。默认值为False
>>> a = 1024
>>> a.to_bytes(2, byteorder='big')
b'\x04\x00'
>>> a.to_bytes(10, byteorder='big')
b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00'
>>> a.to_bytes(10, byteorder='big', signed=True)
b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00'
>>> b = -1024
>>> b.to_bytes(10, byteorder='big', signed=True)
b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00'
>>> c = 1000
>>> c.to_bytes((c.bit_length()+7)//8, byteorder='little')
b'\xe8\x03'
from_bytes()
int.from_bytes(bytes, byteorder, *, signed=False) 返回给定字节数组表示的整数,是Python3.2增加的功能。
参数含义:
bytes: 必须是一个bytes-like object 或是生成字节的可迭代对象
byteorder: 表示整数的字节顺序,如果 byteorder 为 "big"
,则最高位字节放在字节数组的开头。 如果 byteorder 为 "little"
,则最高位字节放在字节数组的末尾
signed:是否使用二进制补码表示
>>> int.from_bytes(b'\x04\x00',byteorder='big')
1024
>>> int.from_bytes(b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00', byteorder='big')
1024
>>> int.from_bytes(b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00', byteorder='big',signed=True)
-1024
float(浮点数)
带小数部分的数字(如:4.5,6.78
)是float类型。float()
函数可以将数字转换为float类型。浮点数通常使用C中的double来实现,浮点数精度和