内置类型

主要内置类型有数字、序列、映射、类、实例和异常。

有些多项集类是可变的。 它们用于添加、移除或重排其成员的方法将原地执行,并不返回特定的项,绝对不会返回多项集实例自身而是返回 None。

逻辑值检测

任何对象都可以进行逻辑值的检测,以便在 if 或 while 作为条件或是作为下文所述布尔运算的操作数来使用。

  • 一个对象在默认情况下均被视为真值,除非当该对象被调用时其所属类定义了 bool() 方法且返回 False 或是定义了 len() 方法且返回零。

  • 下面基本完整地列出了会被视为假值的内置对象:

  • 被定义为假值的常量: None 和 False。

  • 任何数值类型的零: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)

  • 空的序列和多项集: ‘’, (), [], {}, set(), range(0)

产生布尔值结果的运算和内置函数总是返回 0 或 False 作为假值,1 或 True 作为真值,除非另行说明。 (重要例外:布尔运算 or 和 and 总是返回其中一个操作数。)

布尔运算

布尔运算,按优先级升序排列:

运算

结果:

注释

x or y

if x is false, then y, else x

(1)

x and y

if x is false, then x, else y

(2)

not x

if x is false, then True, else False

(3)

这是个短路运算符,因此只有在第一个参数为假值时才会对第二个参数求值。

这是个短路运算符,因此只有在第一个参数为真值时才会对第二个参数求值。

not 的优先级比非布尔运算符低,因此 not a == b 会被解读为 not (a == b) 而 a == not b 会引发语法错误。

比较运算

运算

含义

<

严格小于

<=

小于或等于

>

严格大于

>=

大于或等于

==

等于

!=

不等于

is

对象标识

is not

否定的对象标识

  • 除不同的数字类型外,不同类型的对象不能进行相等比较。== 运算符总有定义,但对于某些对象类型(例如,类对象),它等于 is 。
  • 具有不同标识的类的实例比较结果通常为不相等,除非类定义了 __eq__() 方法
  • 一个类实例不能与相同类或的其他实例或其他类型的对象进行排序,除非该类定义了足够多的方法,包括 __lt__(), __le__(), __gt__() 以及 __ge__() (而如果你想实现常规意义上的比较操作,通常只要有 __lt__()__eq__() 就可以了)。
  • isis not 运算符无法自定义;并且它们可以被应用于任意两个对象而不会引发异常
  • innot in,它们被 iterable 或实现了 __contains__() 方法的类型所支持。

数字类型

  • 当一个二元算术运算符的操作数有不同数值类型时,”较窄”类型的操作数会拓宽到另一个操作数的类型,其中整数比浮点数窄,浮点数比复数窄。不同类型的数字之间的比较,同比较这些数字的精确值一样。
  • 构造函数 int()float()complex() 可以用来构造特定类型的数字。

算术运算

运算

结果:

注释

完整文档

x + y

xy 的和

x - y

xy 的差

x * y

xy 的乘积

x / y

xy 的商

x // y

xy 的商数

(1)

x % y

remainder of x / y

(2)

-x

x 取反

+x

x 不变

abs(x)

x 的绝对值或大小

abs()

int(x)

x 转换为整数

(3)(6)

int()

float(x)

x 转换为浮点数

(4)(6)

float()

complex(re, im)

一个带有实部 re 和虚部 im 的复数。im 默认为0。

(6)

complex()

c.conjugate()

复数 c 的共轭

divmod(x, y)

(x // y, x % y)

(2)

divmod()

pow(x, y)

xy 次幂

(5)

pow()

x ** y

xy 次幂

(5)

整型的运算

运算

结果:

math.trunc(x)

x 截断为 Integral

round(x[, n])

x 舍入到 n 位小数,半数值会舍入到偶数。 如果省略 n,则默认为 0。

math.floor(x)

<= x 的最大 Integral

math.ceil(x)

>= x 的最小 Integral

位运算

运算

结果:

注释

x | y

xy 按位

(4)

x ^ y

xy 按位 异或

(4)

x & y

xy 按位

(4)

x << n

x 左移 n

(1)(2)

x >> n

x 右移 n

(1)(3)

~x

x 逐位取反

  • 负的移位数是非法的,会导致引发 ValueError。

  • 左移 n 位等价于不带溢出检测地乘以 pow(2, n) 。

  • 右移 n 位等价于除以 pow(2, n) ,作向下取整除法。

整数类型的附加方法

浮点类型的附加方法

数字类型的哈希运算

迭代器类型

container.__iter__()

返回一个迭代器对象。 该对象需要支持下文所述的迭代器协议。 如果容器支持不同的迭代类型,则可以提供额外的方法来专门地请求不同迭代类型的迭代器。 (支持多种迭代形式的对象的例子有同时支持广度优先和深度优先遍历的树结构。) 此方法对应于 Python/C API 中 Python 对象类型结构体的 tp_iter 槽位。

迭代器对象自身需要支持以下两个方法,它们共同组成了 迭代器协议:

iterator.__iter__()

返回迭代器对象本身。 这是同时允许容器和迭代器配合 for 和 in 语句使用所必须的。 此方法对应于 Python/C API 中 Python 对象类型结构体的 tp_iter 槽位。

iterator.__next__()

从容器中返回下一项。 如果已经没有项可返回,则会引发 StopIteration 异常。 此方法对应于 Python/C API 中 Python 对象类型结构体的 tp_iternext 槽位。

生成器类型

序列类型

序列类型的通用操作

文本序列类型

二进制序列类型

集合类型

映射类型

上下文管理器类型

其他内置类型