Python: operator --- 标准运算符替代函数

tech2022-07-10  171

operator — 标准运算符替代函数

operator 模块提供了一套与Python的内置运算符对应的高效率函数。例如,operator.add(x, y) 与表达式 x+y 相同。 许多函数名与特殊方法名相同,只是没有双下划线。为了向后兼容性,也保留了许多包含双下划线的函数。为了表述清楚,建议使用没有双下划线的函数。

函数包含的种类有:对象的比较运算、逻辑运算、数学运算以及序列运算。

对象比较函数适用于所有的对象,函数名根据它们对应的比较运算符命名。

import operator operator.lt(a, b) operator.le(a, b) operator.eq(a, b) operator.ne(a, b) operator.ge(a, b) operator.gt(a, b) operator.__lt__(a, b) operator.__le__(a, b) operator.__eq__(a, b) operator.__ne__(a, b) operator.__ge__(a, b) operator.__gt__(a, b)

在 a 和 b 之间进行全比较。具体的,lt(a, b) 与 a < b 相同, le(a, b) 与 a <= b 相同,eq(a, b) 与 a == b 相同,ne(a, b) 与 a != b 相同,gt(a, b) 与 a > b 相同,ge(a, b)与 a >= b 相同。注意这些函数可以返回任何值,无论它是否可当作布尔值。

·

将运算符映射到函数

以下表格显示了抽象运算是如何对应于 Python 语法中的运算符和 operator 模块中的函数的

·

原地运算符

许多运算都有“原地”版本。 以下列出的是提供对原地运算符相比通常语法更底层访问的函数,例如 statement x += y 相当于 x = operator.iadd(x, y)。 换一种方式来讲就是 z = operator.iadd(x, y) 等价于语句块 z = x; z += y。

在这些例子中,请注意当调用一个原地方法时,运算和赋值是分成两个步骤来执行的。 下面列出的原地函数只执行第一步即调用原地方法。 第二步赋值则不加处理。

对于不可变的目标例如字符串、数字和元组,更新的值会被计算,但不会被再被赋值给输入变量:

>>> a = 'hello' >>> iadd(a, ' world') 'hello world' >>> a 'hello'

对于可变的目标例如列表和字典,原地方法将执行更新,因此不需要后续赋值操作:

>>> s = ['h', 'e', 'l', 'l', 'o'] >>> iadd(s, [' ', 'w', 'o', 'r', 'l', 'd']) ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'] >>> s ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']

operator.iadd(a, b) operator.__ iadd__(a, b) a = iadd(a, b) 等价于 a += b。

operator.iand(a, b) operator.__ iand__(a, b) a = iand(a, b) 等价于 a &= b。

operator.iconcat(a, b) operator.__ iconcat__(a, b) a = iconcat(a, b) 等价于 a += b 其中 a 和 b 为序列。

operator.ifloordiv(a, b) operator.__ ifloordiv__(a, b) a = ifloordiv(a, b) 等价于 a //= b。

operator.ilshift(a, b) operator.__ ilshift__(a, b) a = ilshift(a, b) 等价于 a <<= b。

operator.imod(a, b) operator.__ imod__(a, b) a = imod(a, b) 等价于 a %= b。

operator.imul(a, b) operator.__ imul__(a, b) a = imul(a, b) 等价于 a *= b。

operator.imatmul(a, b) operator.__ imatmul__(a, b) a = imatmul(a, b) 等价于 a @= b。

·

3.5 新版功能.

operator.ior(a, b) operator.__ ior__(a, b) a = ior(a, b) 等价于 a |= b。

operator.ipow(a, b) operator.__ ipow__(a, b) a = ipow(a, b) 等价于 a **= b。

operator.irshift(a, b) operator.__ irshift__(a, b) a = irshift(a, b) 等价于 a >>= b。

operator.isub(a, b) operator.__ isub__(a, b) a = isub(a, b) 等价于 a -= b。

operator.itruediv(a, b) operator.__ itruediv__(a, b) a = itruediv(a, b) 等价于 a /= b。

operator.ixor(a, b) operator.__ ixor__(a, b) a = ixor(a, b) 等价于 a ^= b。

最新回复(0)