数字(整数、浮点数、复数)

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 中运算符的优先顺序进行了总结,从最低优先级(最后绑定)到最高优先级(最先绑定)。

  • 相同单元格内的运算符具有相同优先级。

  • 除非句法显式地给出,否则运算符均指二元运算。

  • 相同单元格内的运算符均从左至右分组(除了幂运算是从右至左分组)。

  • 比较、成员检测和标识号检测均为相同优先级,并具有从左至右串连特性。

运算符

描述

  • (expressions…),

  • [expressions…],

  • {key: value…},

  • {expressions…}

  • 加圆括号的表达式,

  • 列表显示,字典显示,集合显示

  • (最高优先级)

  • x[index]

  • x[index:index]

  • x(arguments…)

  • x.attribute

抽取,切片,调用,属性引用

await x

await 表达式

**

乘方 6

+x, -x, ~x

正,负,按位非 NOT

*, @, /, //, %

乘,矩阵乘,除,整除,取余 5

+, -

加和减

<<, >>

移位

&

按位与 AND

^

按位异或 XOR

|

按位或 OR

  • in, not in

  • is, is not,

  • <, <=, >, >=,

  • !=, ==

比较运算,包括成员检测和标识号检测

not x

布尔逻辑非 NOT

and

布尔逻辑与 AND

or

布尔逻辑或 OR

if – else

条件表达式

lambda

lambda 表达式

=

赋值表达式