2.4.Number
Windows 10
Python 3.7.3 @ MSC v.1915 64 bit (AMD64)
Latest build date 2020.11.21
Python 只有三种数值类型:整数、浮点数、复数。
整数
numbers.Integral
描述了数学上的整数集(正数和负数)。
Python 有 2 种整数类型:
-
数值型整数
numbers.Integral
,int
类型实现了该抽象接口。数值型整数的表示范围在语言上是无限制的,只受限于计算机的内存(虚拟内存)。对于以移位和屏蔽运算,数值型正数被认为是二进制的形式,如果是负数,那么就被转换成二进制补码形式,符号位向左扩展。 -
布尔型整数
bool
。布尔类型是int
的子类型,分别用数值 0 和 1 来表示假和真,但是当返回值的类型是字符时,其分别用"False"
或者“True”
表示。
返回该整数对应的二进制形式所需要的位数
int_num = 10
int_num.bit_length
<function int.bit_length()>
浮点数
浮点数 numbers.Real
表示机器级的双精度浮点数,float
类型实现了该抽象接口。其表示范围和溢出处理受限于 机器体系结构 和 编译器/解释器 的具体实现。
Python 不支持单精度浮点数,使用它的原因通常是减少CPU负荷和节省内存,但这些节省的开销与在 Python 中使用对象的开销相比要小得多,因此没有必要支持两种浮点数使语言变得复杂。
关于运行程序的机器的浮点数的精度和内部表示的信息可以在 sys.float_info
中找到。
float_num = 10.5
获取浮点数的十六进制表示。
float_num.hex()
'0x1.5000000000000p+3'
该浮点数是否为整数。
float_num.is_integer()
float_num.as_integer_ratio()
(21, 2)
从十六进制小数的字符串创建浮点数。
float.fromhex('0x1.ffffp10')
2047.984375
返回一对整数,其比率等于该浮点数,分子永远为正整数,如果原浮点数为 NaN,将引发 OverflowError
。
float_num = -10.5
float_num.as_integer_ratio()
(-21, 2)
复数
复数 numbers.Complex
描述了一对机器级的双精度浮点数,complex
类型实现了该抽象接口。复数 z
的实部和虚部可以通过属性 z.real
和 z.imag
获得。
Python 完全支持数值类型的混合计算。当不同数值类型的操作数被用于计算时,表示范围小的操作数将被扩大到另一个操作数的类型。其中,整数比浮点数范围窄,浮点数比复数窄。
complex_num = 10 + 5j
获取共轭复数
complex_num.conjugate()
(10-5j)
获取 实部 和 虚部
# tag = "input"
print(complex_num.real)
print(complex_num.imag)
10.0
5.0
进制数表示
在 Python 中,整数可以使用二进制、八进制、十六进制表示,默认使用十进制形式。浮点数的整数部分及小数部分都只能使用十进制表示。
0b
或 0B
开头表示二进制数:
0b10
2
可以使用bin
函数获取一个10进制数值的二进制形式。bin
函数返回的是数值的二进制形式的字符串,而不是数字。
bin(2)
'0b10'
0o
或 0O
开头表示八进制数:
0o10
8
可以使用oct
函数获取10进制整数的8进制整数形式:
oct(8)
'0o10'
0x
或 0X
开头表示十六进制数:
0x10
16
科学记数法
e
或 E
表示 exponent(指数)。
0e0 == 0.0
1.23e2 == 123
1.23e-2 == 0.0123
True
数位分隔符
数值的字面值包含 _
符号是合法的,_
可以用来分隔数位,但 _
不能放在数字的开头。
1000_000
123.456_789
0b101_010
0x_101_010
1052688
进制转换
int
除了用来创建整数,还可以将非十进制的数值字符串转换为十进制数值。
16 进制转换为 10 进制
int("0x10", base=16)
16
10 进制转换为 16 进制字符串
hex(16)
'0x10'