首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

operator

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)

ab之间执行“丰富的比较” 。具体而言,lt(a, b)就相当于a < ble(a, b)等同于a <= beq(a, b)相当于a == bne(a, b)等同于a != bgt(a, b)相当于a > bge(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)

返回按位和ab

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)

按位或返回ab

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)

返回按位独占或ab

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

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()与切片指数。

操作员功能的使用示例:

代码语言:javascript
复制
>>> # 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模块还定义了几个谓词来测试对象的类型; 然而,这些并不都是可靠的。优选的是,测试抽象基类代替(见collectionsnumbers细节)。

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)

相当于:

代码语言:javascript
复制
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])

相当于:

代码语言:javascript
复制
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__()方法接受的任何类型。字典接受任何可排序的值。列表,元组和字符串接受索引或片:

代码语言:javascript
复制
>>> itemgetter(1)('ABCDEFG')
'B'
>>> itemgetter(1,3,5)('ABCDEFG')
('B', 'D', 'F')
>>> itemgetter(slice(2,None))('ABCDEFG')
'CDEFG'

2.4版本中的新功能。

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

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

代码语言:javascript
复制
>>> 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)

相当于:

代码语言:javascript
复制
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)

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com