设为首页 加入收藏

TOP

Python数值类型 int、float、complex 详解(一)
2019-04-02 22:08:30 】 浏览:146
Tags:Python 数值 类型 int float complex 详解

在Python程序中,int、float和complex是三种十分重要的数值类型,分别代表整数、浮点数和复数。本节将进一步讲解与这三种数据类型相关的其他函数。


1、三种类型的关系


在Python程序中有三种数值类型,分别是整型(integers), 浮点型(floating point numbers), 以及复数(complex numbers)。其中整型拥有准确的精度,浮点型一般是实现C中的double 类型,有关浮点型的精度信息以及其在具体机器中的内部特性信息,可以使用函数sys.float_info()获取。复数类型由一个实数部分(即实部)与一个虚数部分(即虚部)构成,而这两个部分都是浮点型。


Python所有的数值类型(复数除外)都支持表2-1中的操作(按优先级升序排列)(所有数字操作的优先级均高于比较操作)。


表 数值类型操作


2、整数类型的相关函数


在Python程序中,int类型提供了如下所示的内置函数。


(1)int.bit_length():返回表示二进制整数所需的位数,不包括符号和前置零。


(2)int.to_bytes(length, byteorder, *, signed=False):返回一个表示整数的字节数组。
1.length:数组的长度,如果整数转换出的字节数组长度超过了该长度,则产生OverflowError;
2.byteorder:字节序;值为"big"或者"little","big"表示最有意义的字节放在字节数组的开头,"little"表示最有意义的字节放在字节数组的结尾。在sys.byteorder保存了主机系统的字节序;
3.signed:确定是否使用补码来表示整数,如果值为false且是负数,则产生OverflowError。默认值为False。


(3)int.from_bytes(bytes, byteorder, *, signed=False):返回由给定的字节数组表示的整数。
1.bytes:字节数组或者是一个iterable;
2.byteorder:同函数to_bytes()相同;
3.signed:同函数to_bytes()相同。


例如在下面的实例文件Linux公社.py中,演示了使用整数类型的相关函数的过程。


#使用bit_length()返回表示二进制整数所需的位数,不包括符号和前导零:
n = -37
print(bin(n))
print(n.bit_length())
#使用函数to_bytes()返回一个表示整数的字节数组。
print((1024).to_bytes(2, byteorder='big'))
print((1024).to_bytes(10, byteorder='big'))
print((-1024).to_bytes(10, byteorder='big', signed=True))
x = 1000
print(x.to_bytes((x.bit_length() // 8) + 1, byteorder='little'))
#使用函数from_bytes()返回由给定的字节数组表示的整数。
print(int.from_bytes(b'\x00\x10', byteorder='big'))
print(int.from_bytes(b'\x00\x10', byteorder='little'))
print(int.from_bytes(b'\xfc\x00', byteorder='big', signed=True))
print(int.from_bytes(b'\xfc\x00', byteorder='big', signed=False))
print(int.from_bytes([255, 0, 0], byteorder='big'))


执行后会输出如下:


-0b100101
6
b'\x04\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00'
b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00'
b'\xe8\x03'
16
4096
-1024
64512
16711680


Python数值类型 int、float、complex


3、浮点类型的相关函数


在Python程序中,float类型提供了如下所示的内置函数。


(1)float.as_integer_ratio():返回一对整数(2元组),它们的比例准确地等于浮点数的原始值,且分母为正数。无穷会引发ValueError错误,NaNs会引发OverflowError错误。


(2)float.is_integer():如果浮点数实例是整数值,则返回True,否则返回False。


上面的两个方法(as_integer_ratio()和is_integer())都支持与十六进制字符串的相互转换。由于Python的浮点数内部存储为二进制数,浮点数和十进制字符串通之间的相互转化通常会有一个小的舍入误差。与此相反的是,十六进制字符串允许浮点数的精确表示和规格。这在调试时和数值工作中很有用。


(3)float.hex():返回浮点数的十六进制字符串表示形式。对于有限的浮点数,这种表示形式总是包括一个前导的0x和尾部的p及指数。


(4)float.fromhex(s):这是一个类方法,功能是返回由十六进制字符串s表示的float。字符串s可能有前导和尾随空格。读者需要注意,float.hex()是实例方法,而float.fromhex()是一个类方法。


在计算机系统中,十六进制字符串的形式为:


[sign] ['0x'] integer ['.' fraction] ['p' exponent]


可选的exponent可以为“+”或“integer”,“sign”和“fraction”是十六进制数的字符串,“-”是带有可选的前导符号的十进制整数。大小写不敏感,且整数或小数至少有一个十六进制数字。此语法类似于C99 标准的第6.4.4.2节中指明的语法,也类似Java 1.5起使用的语法。float.hex()的输出在C或Java代码中可作为十六进制浮点数的字面值,而且C的Double.toHexString格式的十六进制字符串或Java的%a可以被float.fromhex()接受。在此需要注意的是,指数使用的是十进制数而不是十六进制表示,并且它给出用来乘系数的2的幂。例如,十六进制的字符串0x3.a7p10表示浮点数(3 + 10./16 + 7./162) * 2.010,或3740.0。


例如在下面的实例文件Linuxidc.com.py中,演示了使用浮点类型的相关函数的过程。


print((-2.0).is_integer())
print((3.2).is_integer())
print(float.fromhex('0x3.a7p10'))
print(float.fromhex('0x3.a7p10'))


执行后会输出如下:


True
False
3740.0
3740.0


Python数值类型 int、float、complex


4  迭代器类型


Python语言支持对容器中的内容进行迭代,允许用户定义的类支持迭代。要想使容器对象支持迭代,需要定义如下所示的方法:


Python迭代器对象本身需要支持以下两种方法,它们一起形成迭代器协议。


例如在下面的实例文件diq.py中,演示
编程开发网

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python内置数据类型 - 文本序列类.. 下一篇Python Turtle绘制漂亮彩色螺旋线..