一、说明
operator模块提供了与Python的内置运算符对应的高效率函数。
许多函数名与特殊方法名相同,只是没有双下划线。为了向后兼容性,也保留了许多包含双下划线的函数。为了表述清楚,建议使用没有双下划线的函数。
函数包含的种类有:对象的比较运算、逻辑运算、数学运算以及序列运算。
二、对象比较函数
对象比较函数适用于所有的对象,函数名根据它们对应的比较运算符命名。
运算 | 语法 | 函数 |
比较 | a < b | lt(a, b) |
比较 | a <= b | le(a, b) |
相等 | a = b | eq(a, b) |
不等 | a !=b | ne(a, b) |
比较 | a >= b | ge(a, b) |
比较 | a > b | gt(ab) |
三、逻辑运算函数
逻辑运算通常也适用于所有对象,并且支持真值检测、标识检测和布尔运算。
运算 | 语法 | 函数 |
取反(逻辑) | not a | not_(a) |
真值测试 | obj | truth(obj) |
标识 | a is b | is_(a, b) |
标识 | a is not b | is_not(a, b) |
四、数学运算
运算 | 语法 | 函数 |
加法 | a + b | add(a, b) |
减法 | a - b | sun(a, b) |
乘法 | a * b | mul(a, b) |
除法 | a / b | truediv(a, b) |
除法 | a // b | floordiv(a, b) |
取幂 | a ** b | pow(a, b) |
取模 | a % b | mod(a, b) |
取反 | - a | neg(a) |
矩阵乘法 | a @ b | malmul(a, b) |
五、 位运算
运算 | 语法 | 函数 |
按位与 | a & b | and_(a, b) |
按位或 | a | b | or_(a, b) |
按位取反 | ~ a | invert(a) |
按位异或 | a ^ b | xor(a, b) |
六、序列操作
运算 | 语法 | 函数 |
字符串拼接 | seq1 + seq2 | concat(seq1 + seq2) |
判断 | b in a | contains(a, b) |
返回 b 在 a 中的出现次数。 | countOf(a, b) | |
移除索引号 b 上的值 a。 | del a[b] | delitem(a, b) |
返回索引号 b 上的值 a | a[b] | getitem(a, b) |
将索引号 b 上的值 a 设为 c | a[b] = c | setitem(a, b, c) |
返回 b 在 a 中首次出现所在的索引号 | 如果是列表。a.index(b) | indexOf(a, b) |
七、条目查找函数
operator.
attrgetter 源码
def attrgetter(*items): if any(not isinstance(item, str) for item in items): raise TypeError('attribute name must be a string') if len(items) == 1: attr = items[0] def g(obj): return resolve_attr(obj, attr) else: def g(obj): return tuple(resolve_attr(obj, attr) for attr in items) return g
operator.
itemgetter 源码
def itemgetter(*items): if len(items) == 1: item = items[0] def g(obj): return obj[item] else: def g(obj): return tuple(obj[item] for item in items) return g
例子:
from operator import itemgetter print(itemgetter('name')({'name': 'tu', 'age': 18})) print(itemgetter(1)('ABCDEFG')) print(itemgetter(1, 3, 5)('ABCDEFG')) print(itemgetter(slice(2,None))('ABCDEFG')) soldier = dict(rank='captain', name='dotterbart') print(itemgetter('rank')(soldier))
methodcaller 源码:
def methodcaller(name, /, *args, **kwargs): def caller(obj): return getattr(obj, name)(*args, **kwargs) return caller
八、原地运算符
运算 | 语法 | 函数 |
数值 | a += b | a = iadd(a, b) |
a -= b | a = isub(a, b) | |
a *= b | a = imul(a, b) | |
a /=b | a = itruediv(a, b) | |
a **= b | a = ipow(a, b) | |
a %= b | a = imod(a, b) | |
a //b | a = ifloordiv(a, b) | |
a &= b | a = iand(a, b) | |
序列 | a += b | a = iconcat(a, b) |
a @= b | a = imatmul(a,b) | |
a |= b | a = ior(a,b) | |
a ^= b | a = ixor(a, b) |