数字(整数、浮点数、复数)¶
Python 内置了三种不同的数字类型:整数,浮点数和复数。此外,布尔值属于整数的子类型。 整数具有无限的精度。浮点数通常使用 C 中的 double 来实现(宿主机上浮点数的精度和内部表示法可在 sys.float_info 中查看)。复数包含实部和虚部,分别以一个浮点数表示。要从一个复数 z 中提取这两个部分,可使用 z.real 和 z.imag。(标准库包含附加的数字类型,如表示有理数的 fractions.Fraction 以及以用户定制精度表示浮点数的 decimal.Decimal。)
数字是由数字字面值或内置函数与运算符的结果来创建的。不带修饰的整数字面值(包括十六进制、八进制和二进制数)会生成整数。包含小数点或幂运算符的数字字面值会生成浮点数。在数字字面值末尾加上 ‘j’ 或 ‘J’ 会生成虚数(实部为零的复数),可以将其与整数或浮点数相加来得到具有实部和虚部的复数。
数字运算符¶
Python 完全支持混合算术:当一个二元运算符用于不同数字类型的操作数时,具有“较窄”类型的操作数会被扩展为另一个操作数的类型,整数比浮点数更窄,浮点数又比复数更窄。混合类型数字之间的比较也使用相同的规则。
所有数字类型(复数除外)都支持下列运算(有关运算优先级,请参阅:运算符优先级):
运算符 |
描述 |
|---|---|
+ |
加 - 两个对象相加 |
- |
减 - 两个对象相减 |
* |
乘 - 两个对象相乘 |
/ |
除 - 两个对象相除 |
// |
整除 - 向下取除数的整数 |
% |
取模 - 返回除法的余数 |
-x |
x 取反 |
+x |
x 不变 |
** |
幂 |
abs(x) |
x 的绝对值或大小 |
int(x) |
将 x 转换为整数 |
float(x) |
将 x 转换为浮点数 |
complex(re, im) |
一个带有实部 re 和虚部 im 的复数。im 默认为0。 |
c.conjugate() |
复数 c 的共轭 |
divmod(x, y) |
(x // y, x % y) |
pow(x, y) |
x 的 y 次幂 |
>>> 7 + 4
11
>>> 7.0 + 4 # 整数扩展为浮点数计算
11.0
>>> 7 - 4
3
>>> 7 * 4
28
>>> 7 / 4
1.75
>>> 7 // 4
1
>>> 7 % 4
3
>>> -4
-4
>>> +4
4
>>> 4 ** 7
16384
>>> complex(7, 4)
(7+4j)
>>> divmod(7, 4)
(1, 3)
整数按位运算符¶
按位运算只对整数有意义。计算按位运算的结果,就相当于使用无穷多个二进制符号位对二的补码执行操作。
运算 |
描述 |
|---|---|
| |
按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 |
^ |
按位异或运算符:当两对应的二进位相异时,结果为1 |
& |
按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 |
<< |
左移动运算符:运算数的各二进位全部左移若干位,高位丢弃,低位补0。 |
>> |
右移动运算符:把”>>”左边的运算数的各二进位全部右移若干位 |
~ |
按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1 |
# 将整数转换成二进制格式
>>> format(60, 'b')
'111100'
>>> format(13, 'b')
'1101'
>>> 60 | 13
61
>>> format(61, 'b')
'111101'
>>> 60 ^ 13
49
>>> format(49, 'b')
'110001'
>>> 60 & 13
12
>>> format(12, 'b')
'1100'
>>> 60 << 2
240
>>> format(240, 'b')
'11110000'
>>> 60 >> 2
15
>>> format(15, 'b')
'1111'
>>> ~60
-61
>>> format(-61, 'b')
'-111101'
>>> ~13
-14
>>> format(-14, 'b')
'-1110'
运算符优先级¶
下表对 Python 中运算符的优先顺序进行了总结,从最低优先级(最后绑定)到最高优先级(最先绑定)。
相同单元格内的运算符具有相同优先级。
除非句法显式地给出,否则运算符均指二元运算。
相同单元格内的运算符均从左至右分组(除了幂运算是从右至左分组)。
比较、成员检测和标识号检测均为相同优先级,并具有从左至右串连特性。
运算符 |
描述 |
|---|---|
|
|
|
抽取,切片,调用,属性引用 |
await x |
await 表达式 |
** |
乘方 6 |
+x, -x, ~x |
正,负,按位非 NOT |
*, @, /, //, % |
乘,矩阵乘,除,整除,取余 5 |
+, - |
加和减 |
<<, >> |
移位 |
& |
按位与 AND |
^ |
按位异或 XOR |
| |
按位或 OR |
|
比较运算,包括成员检测和标识号检测 |
not x |
布尔逻辑非 NOT |
and |
布尔逻辑与 AND |
or |
布尔逻辑或 OR |
if – else |
条件表达式 |
lambda |
lambda 表达式 |
= |
赋值表达式 |