标准运算符替代函数(operator模块)

一、说明

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)
原文地址:https://www.cnblogs.com/qianslup/p/12180663.html