operator (Numeric & Mathematical) – Python 中文开发手册

[
  •   Python 中文开发手册

    operator (Numeric & Mathematical) - Python 中文开发手册

    该operator模块导出一组对应于Python内部运算符的高效函数。例如,operator.add(x, y)相当于表达式x+y。函数名称是用于特殊类方法的函数名称; __为方便起见,还提供了无前导和尾随的变体。

    函数分为执行对象比较,逻辑运算,数学运算,序列运算和抽象类型测试的类别。

    对象比较函数对于所有对象都很有用,并且以它们支持的丰富比较运算符命名:

    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。请注意,与内置cmp()函数不同,这些函数可以返回任何值,这些值可以或不可以被解释为布尔值。有关富比较的更多信息,请参阅比较。

    2.2版本中的新功能。

    逻辑操作通常也适用于所有对象,并支持真值测试,身份测试和布尔操作:

    operator.not_(obj)operator.__not__(obj)

    返回obj的结果。(注意对象实例没有方法;只有解释器内核定义了这个操作,结果受到和方法的影响。)not __not__()__nonzero__()__len__()

    operator.truth(obj)

    True如果obj为真,False则返回,否则返回。这相当于使用bool构造函数。

    operator.is_(a, b)

    返回a is b。测试对象标识。

    2.3版本的新功能。

    operator.is_not(a, b)

    返回a is not b。测试对象标识。

    2.3版本的新功能。

    数学和位运算是最多的:

    operator.abs(obj)operator.__abs__(obj)

    返回obj的绝对值。

    operator.add(a, b)operator.__add__(a, b)

    返回a + b,用于一个和b的数字。

    operator.and_(a, b)operator.__and__(a, b)

    返回按位和a和b。

    operator.div(a, b)operator.__div__(a, b)

    无效a / b时返回__future__.division。这也被称为“经典”分工。

    operator.floordiv(a, b)operator.__floordiv__(a, b)

    返回a // b。

    2.2版本中的新功能。

    operator.index(a)operator.__index__(a)

    返回一个转换为整数。相当于a.__index__()。

    2.5版本中的新功能。

    operator.inv(obj)operator.invert(obj)operator.__inv__(obj)operator.__invert__(obj)

    返回数字obj的按位倒数。这相当于~obj。

    版本2.0中的新功能:名称invert()和__invert__()。

    operator.lshift(a, b)operator.__lshift__(a, b)

    返回一个左移b。

    operator.mod(a, b)operator.__mod__(a, b)

    返回a % b。

    operator.mul(a, b)operator.__mul__(a, b)

    返回a * b,用于一个和b的数字。

    operator.neg(obj)operator.__neg__(obj)

    返回obj否定(-obj)。

    operator.or_(a, b)operator.__or__(a, b)

    按位或返回a和b。

    operator.pos(obj)operator.__pos__(obj)

    返回obj positive(+obj)。

    operator.pow(a, b)operator.__pow__(a, b)

    返回a ** b,用于一个和b的数字。

    2.3版本的新功能。

    operator.rshift(a, b)operator.__rshift__(a, b)

    返回一个由右移b。

    operator.sub(a, b)operator.__sub__(a, b)

    返回a - b。

    operator.truediv(a, b)operator.__truediv__(a, b)

    返回a / b时__future__.division生效。这也被称为“真实”部门。

    2.2版本中的新功能。

    operator.xor(a, b)operator.__xor__(a, b)

    返回按位独占或a和b。

    与序列一起工作的操作(其中一些与映射也一样)包括:

    operator.concat(a, b)operator.__concat__(a, b)

    返回a + b为一个和b序列。

    operator.contains(a, b)operator.__contains__(a, b)

    返回测试的结果b in a。请注意颠倒的操作数。

    版本2.0中的新功能:名称__contains__()。

    operator.countOf(a, b)

    返回的出现次数b中的一个。

    operator.delitem(a, b)operator.__delitem__(a, b)

    除去的值一个索引b。

    operator.delslice(a, b, c)operator.__delslice__(a, b, c)

    删除的切片一个从索引b到索引C-1 。

    自2.6版弃用:此功能在Python 3.x中被删除。使用delitem()与切片指数。

    operator.getitem(a, b)operator.__getitem__(a, b)

    返回的值一个索引b。

    operator.getslice(a, b, c)operator.__getslice__(a, b, c)

    返回的切片一个从索引b到索引C-1 。

    自2.6版弃用:此功能在Python 3.x中被删除。使用getitem()与切片指数。

    operator.indexOf(a, b)

    返回第一个的发生的索引b中一个。

    operator.repeat(a, b)operator.__repeat__(a, b)

    自2.7版弃用:__mul__()改为使用。

    返回a * b,其中一个是一个序列和b是整数。

    operator.sequenceIncludes(...)

    自2.0版弃用:contains()改为使用。

    别名contains()。

    operator.setitem(a, b, c)operator.__setitem__(a, b, c)

    设定的值一个索引b到Ç。

    operator.setslice(a, b, c, v)operator.__setslice__(a, b, c, v)

    的切片设定一个从索引b到索引C-1到序列v。

    自2.6版弃用:此功能在Python 3.x中被删除。使用setitem()与切片指数。

    操作员功能的使用示例:

    >>> # Elementwise multiplication
    >>> map(mul, [0, 1, 2, 3], [10, 20, 30, 40])
    [0, 20, 60, 120]
    
    >>> # Dot product
    >>> sum(map(mul, [0, 1, 2, 3], [10, 20, 30, 40]))
    200

    许多操作都有一个“就地”版本。下面的函数提供了比通常的语法更原始的就地操作符的访问; 例如,该陈述 x += y相当于x = operator.iadd(x, y)。另一种说法就是说这z = operator.iadd(x, y)相当于复合语句z = x; z += y。

    operator.iadd(a, b)operator.__iadd__(a, b)

    a = iadd(a, b) is equivalent to a += b.

    2.5版本中的新功能。

    operator.iand(a, b)operator.__iand__(a, b)

    a = iand(a, b)相当于a &= b。

    2.5版本中的新功能。

    operator.iconcat(a, b)operator.__iconcat__(a, b)

    a = iconcat(a, b)相当于a += b用于一个和b序列。

    2.5版本中的新功能。

    operator.idiv(a, b)operator.__idiv__(a, b)

    a = idiv(a, b)相当于a /= b什么时候__future__.division不生效。

    2.5版本中的新功能。

    operator.ifloordiv(a, b)operator.__ifloordiv__(a, b)

    a = ifloordiv(a, b)相当于a //= b。

    2.5版本中的新功能。

    operator.ilshift(a, b)operator.__ilshift__(a, b)

    a = ilshift(a, b)相当于a <<= b。

    2.5版本中的新功能。

    operator.imod(a, b)operator.__imod__(a, b)

    a = imod(a, b)相当于a %= b。

    2.5版本中的新功能。

    operator.imul(a, b)operator.__imul__(a, b)

    a = imul(a, b)相当于a *= b。

    2.5版本中的新功能。

    operator.ior(a, b)operator.__ior__(a, b)

    a = ior(a, b)相当于a |= b。

    2.5版本中的新功能。

    operator.ipow(a, b)operator.__ipow__(a, b)

    a = ipow(a, b)相当于a **= b。

    2.5版本中的新功能。

    operator.irepeat(a, b)operator.__irepeat__(a, b)

    自2.7版弃用:__imul__()改为使用。

    a = irepeat(a, b)等同于a *= b其中a是序列并且b是整数。

    2.5版本中的新功能。

    operator.irshift(a, b)operator.__irshift__(a, b)

    a = irshift(a, b)相当于a >>= b。

    2.5版本中的新功能。

    operator.isub(a, b)operator.__isub__(a, b)

    a = isub(a, b)相当于a -= b。

    2.5版本中的新功能。

    operator.itruediv(a, b)operator.__itruediv__(a, b)

    a = itruediv(a, b)相当于a /= b何时__future__.division生效。

    2.5版本中的新功能。

    operator.ixor(a, b)operator.__ixor__(a, b)

    a = ixor(a, b)相当于a ^= b。

    2.5版本中的新功能。

    该operator模块还定义了几个谓词来测试对象的类型; 然而,这些并不都是可靠的。优选的是,测试抽象基类代替(见collections和numbers细节)。

    operator.isCallable(obj)

    自2.0版弃用:isinstance(x, collections.Callable)改为使用。

    如果对象obj可以像函数一样调用,则返回true,否则返回false。True返回函数,绑定和未绑定的方法,类对象和支持该__call__()方法的实例对象。

    operator.isMappingType(obj)

    自2.7版弃用:isinstance(x, collections.Mapping)改为使用。

    如果对象obj支持映射接口,则返回true 。对于字典和所有实例对象的定义都是如此__getitem__()。

    operator.isNumberType(obj)

    自2.7版弃用:isinstance(x, numbers.Number)改为使用。

    如果对象obj表示一个数字,则返回true 。对于在C中实现的所有数字类型都是如此。

    operator.isSequenceType(obj)

    自2.7版弃用:isinstance(x, collections.Sequence)改为使用。

    如果对象obj支持序列协议,则返回true 。对于定义C中序列方法的所有对象以及所有定义的实例对象,这都会返回true __getitem__()。

    该operator模块还定义了用于通用属性和项目查找的工具。这些是使现场快速提取作为参数都非常有用map(),sorted(),itertools.groupby(),或期望的功能参数等功能。

    operator.attrgetter(attr)operator.attrgetter(*attrs)

    返回一个可从其操作数中获取attr的可调用对象。如果请求多个属性,则返回一个属性元组。属性名称也可以包含点。例如:

    之后f = attrgetter('name'),调用f(b)返回b.name。之后f = attrgetter('name', 'date'),调用f(b)返回(b.name, b.date)。之后f = attrgetter('name.first', 'name.last'),调用f(b)返回(b.name.first, b.name.last)。

    相当于:

    def attrgetter(*items):
        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
    
    def resolve_attr(obj, attr):
        for name in attr.split("."):
            obj = getattr(obj, name)
        return obj

    2.4版本中的新功能。

    在版本2.5中进行了更改:增加了对多个属性的支持。

    在版本2.6中更改:添加了对虚线属性的支持。

    operator.itemgetter(item)operator.itemgetter(*items)

    返回一个可调用的对象,使用操作数的方法从其操作数中获取项目__getitem__()。如果指定了多个项目,则返回查找值的元组。例如:

    之后f = itemgetter(2),调用f(r)返回r[2]。之后g = itemgetter(2, 5, 3),调用g(r)返回(r[2], r[5], r[3])。

    相当于:

    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

    这些项目可以是操作数__getitem__()方法接受的任何类型。字典接受任何可排序的值。列表,元组和字符串接受索引或片:

    >>> itemgetter(1)('ABCDEFG')
    'B'
    >>> itemgetter(1,3,5)('ABCDEFG')
    ('B', 'D', 'F')
    >>> itemgetter(slice(2,None))('ABCDEFG')
    'CDEFG'

    2.4版本中的新功能。

    在版本2.5中进行了更改:增加了对多项提取的支持。

    使用itemgetter()从元组记录中检索特定字段的示例:

    >>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
    >>> getcount = itemgetter(1)
    >>> map(getcount, inventory)
    [3, 2, 5, 1]
    >>> sorted(inventory, key=getcount)
    [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]

    operator.methodcaller(name[, args...])

    返回一个可调用对象,它在其操作数上调用方法名称。如果给出了额外的参数和/或关键字参数,它们也会被赋予该方法。例如:

    之后f = methodcaller('name'),调用f(b)返回b.name()。之后f = methodcaller('name', 'foo', bar=1),调用f(b)返回b.name('foo', bar=1)。

    相当于:

    def methodcaller(name, *args, **kwargs):
        def caller(obj):
            return getattr(obj, name)(*args, **kwargs)
        return caller

    2.6版本中的新功能。

    1.将运算符映射到函数

    此表显示了抽象操作在Python语法和operator模块中的函数中如何对应运算符。

    Operation

    Syntax

    Function

    Addition

    a + b

    add(a, b)

    Concatenation

    seq1 + seq2

    concat(seq1, seq2)

    Containment Test

    obj in seq

    contains(seq, obj)

    Division

    a / b

    div(a, b) (without __future__.division)

    Division

    a / b

    truediv(a, b) (with __future__.division)

    Division

    a // b

    floordiv(a, b)

    Bitwise And

    a & b

    and_(a, b)

    Bitwise Exclusive Or

    a ^ b

    xor(a, b)

    Bitwise Inversion

    ~ a

    invert(a)

    Bitwise Or

    a | b

    or_(a, b)

    Exponentiation

    a ** b

    pow(a, b)

    Identity

    a is b

    is_(a, b)

    Identity

    a is not b

    is_not(a, b)

    Indexed Assignment

    objk = v

    setitem(obj, k, v)

    Indexed Deletion

    del objk

    delitem(obj, k)

    Indexing

    objk

    getitem(obj, k)

    Left Shift

    a << b

    lshift(a, b)

    Modulo

    a % b

    mod(a, b)

    Multiplication

    a * b

    mul(a, b)

    Negation (Arithmetic)

    a

    neg(a)

    Negation (Logical)

    not a

    not_(a)

    Positive

    a

    pos(a)

    Right Shift

    a >> b

    rshift(a, b)

    Sequence Repetition

    seq * i

    repeat(seq, i)

    Slice Assignment

    seqi:j = values

    setitem(seq, slice(i, j), values)

    Slice Deletion

    del seqi:j

    delitem(seq, slice(i, j))

    Slicing

    seqi:j

    getitem(seq, slice(i, j))

    String Formatting

    s % obj

    mod(s, obj)

    Subtraction

    a - b

    sub(a, b)

    Truth Test

    obj

    truth(obj)

    Ordering

    a < b

    lt(a, b)

    Ordering

    a <= b

    le(a, b)

    Equality

    a == b

    eq(a, b)

    Difference

    a != b

    ne(a, b)

    Ordering

    a >= b

    ge(a, b)

    Ordering

    a > b

    gt(a, b)

  •   Python 中文开发手册
    ]
    转载请保留页面地址:https://www.breakyizhan.com/python/35115.html

    posted on 2020-07-06 00:24  MrAit  阅读(289)  评论(0编辑  收藏  举报

    导航