Python数据类型(一)数字类型

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 中直接把TrueFalse定义为关键字,其值还是表示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来实现,浮点数精度和

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值