zoukankan      html  css  js  c++  java
  • 标准运算符替代函数(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)
  • 相关阅读:
    JavaScript数据结构——模仿ES6中定义的类似的Set类
    webpack简单的项目配置发生的错误
    三国
    把握中国经济的大局与动力
    人生道路
    C++
    https://计算机等级分类总结
    https://计算机四级
    https://计算机三级
    https://计算机二级
  • 原文地址:https://www.cnblogs.com/qianslup/p/12180663.html
Copyright © 2011-2022 走看看