operator —- 标准运算符替代函数
源代码:Lib/operator.py
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
The logical operations are also generally applicable to all objects, and supporttruth tests, identity tests, and boolean operations:
operator.
not
(_obj)operator.
not
(obj)Return the outcome of
not
obj. (Note that there is nonot()
method for object instances; only the interpreter core definesthis operation. The result is affected by thebool()
andlen()
methods.)Return
True
if obj is true, andFalse
otherwise. This isequivalent to using thebool
constructor.返回
a is b
. 测试对象标识。- 返回
a is not b
. 测试对象标识。
The mathematical and bitwise operations are the most numerous:
operator.
abs
(obj)operator.
abs
(obj)返回 obj 的绝对值。
operator.
add
(a, b)Return
a + b
, for a and b numbers.operator.
and
(a, b)返回 x 和 y 按位与
operator.
floordiv
(a, b)返回
a // b
.operator.
index
(a)Return a converted to an integer. Equivalent to
a.index()
.operator.
invert
(obj)operator.
inv
(obj)operator.
invert
(obj)Return the bitwise inverse of the number obj. This is equivalent to
~obj
.operator.
lshift
(a, b)Return a shifted left by b.
operator.
mod
(a, b)返回
a % b
.operator.
mul
(a, b)Return
a * b
, for a and b numbers.operator.
matmul
(a, b)- 返回
a @ b
.
3.5 新版功能.
operator.
neg
(obj)operator.
neg
(obj)Return obj negated (
-obj
).operator.
or
(a, b)Return the bitwise or of a and b.
operator.
pos
(obj)Return obj positive (
+obj
).operator.
pow
(a, b)Return
a ** b
, for a and b numbers.operator.
rshift
(a, b)Return a shifted right by b.
operator.
sub
(a, b)返回
a - b
.operator.
truediv
(a, b)Return
a / b
where 2/3 is .66 rather than 0. This is also known as"true" division.operator.
xor
(a, b)- Return the bitwise exclusive or of a and b.
Operations which work with sequences (some of them with mappings too) include:
operator.
concat
(a, b)operator.
concat
(a, b)Return
a + b
for a and b sequences.operator.
contains
(a, b)Return the outcome of the test
b in a
. Note the reversed operands.返回 b 在 a 中的出现次数。
operator.
delitem
(a, b)Remove the value of a at index b.
operator.
getitem
(a, b)Return the value of a at index b.
Return the index of the first of occurrence of b in a.
operator.
setitem
(a, b, c)Set the value of a at index b to c.
- Return an estimated length for the object o. First try to return itsactual length, then an estimate using
object.length_hint()
, andfinally return the default value.
3.4 新版功能.
The operator
module also defines tools for generalized attribute and itemlookups. These are useful for making fast field extractors as arguments formap()
, sorted()
, itertools.groupby()
, or other functions thatexpect a function argument.
operator.
attrgetter
(attr)operator.
attrgetter
(*attrs)Return a callable object that fetches attr from its operand.If more than one attribute is requested, returns a tuple of attributes.The attribute names can also contain dots. For example:
After
f = attrgetter('name')
, the callf(b)
returnsb.name
.After
f = attrgetter('name', 'date')
, the callf(b)
returns(b.name, b.date)
.After
f = attrgetter('name.first', 'name.last')
, the callf(b)
returns(b.name.first, b.name.last)
.
等价于:
- 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
- def resolve_attr(obj, attr):
- for name in attr.split("."):
- obj = getattr(obj, name)
- return obj
operator.
itemgetter
(item)operator.
itemgetter
(*items)Return a callable object that fetches item from its operand using theoperand's
getitem()
method. If multiple items are specified,returns a tuple of lookup values. For example:After
f = itemgetter(2)
, the callf(r)
returnsr[2]
.After
g = itemgetter(2, 5, 3)
, the callg(r)
returns(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
The items can be any type accepted by the operand's getitem()
method. Dictionaries accept any hashable value. Lists, tuples, andstrings accept an index or a slice:
- >>> itemgetter('name')({'name': 'tu', 'age': 18})
- 'tu'
- >>> itemgetter(1)('ABCDEFG')
- 'B'
- >>> itemgetter(1,3,5)('ABCDEFG')
- ('B', 'D', 'F')
- >>> itemgetter(slice(2,None))('ABCDEFG')
- 'CDEFG'
- >>> soldier = dict(rank='captain', name='dotterbart')
- >>> itemgetter('rank')(soldier)
- 'captain'
Example of using itemgetter()
to retrieve specific fields from atuple record:
- >>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
- >>> getcount = itemgetter(1)
- >>> list(map(getcount, inventory))
- [3, 2, 5, 1]
- >>> sorted(inventory, key=getcount)
- [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]
operator.
methodcaller
(name, /, *args, **kwargs)Return a callable object that calls the method name on its operand. Ifadditional arguments and/or keyword arguments are given, they will be givento the method as well. For example:
After
f = methodcaller('name')
, the callf(b)
returnsb.name()
.After
f = methodcaller('name', 'foo', bar=1)
, the callf(b)
returnsb.name('foo', bar=1)
.
等价于:
- def methodcaller(name, /, *args, **kwargs):
- def caller(obj):
- return getattr(obj, name)(*args, **kwargs)
- return caller
Mapping Operators to Functions
This table shows how abstract operations correspond to operator symbols in thePython syntax and the functions in the operator
module.
运算 | 语法 | 函数 |
---|---|---|
加法 | a + b | add(a, b) |
字符串拼接 | seq1 + seq2 | concat(seq1, seq2) |
包含测试 | obj in seq | contains(seq, obj) |
除法 | a / b | truediv(a, b) |
除法 | a // b | floordiv(a, b) |
按位与 | a & b | and(a, b) |
按位异或 | a ^ b | xor(a, b) |
按位取反 | ~ a | invert(a) |
按位或 | a | b | or(a, b) |
取幂 | a * b | pow(a, b) |
一致 | a is b | is_(a, b) |
一致 | a is not b | is_not(a, b) |
索引赋值 | obj[k] = v | setitem(obj, k, v) |
索引删除 | del obj[k] | delitem(obj, k) |
索引取值 | obj[k] | getitem(obj, k) |
左移 | a << b | lshift(a, b) |
取模 | a % b | mod(a, b) |
乘法 | a b | mul(a, b) |
矩阵乘法 | a @ b | matmul(a, b) |
否定(算术) | - a | neg(a) |
否定(逻辑) | not a | not_(a) |
正数 | + a | pos(a) |
右移 | a >> b | rshift(a, b) |
切片赋值 | seq[i:j] = values | setitem(seq, slice(i, j), values) |
切片删除 | del seq[i:j] | delitem(seq, slice(i, j)) |
切片取值 | seq[i:j] | getitem(seq, slice(i, j)) |
字符串格式化 | s % obj | mod(s, obj) |
减法 | a - b | sub(a, b) |
真值测试 | obj | truth(obj) |
比较 | 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(a, b) |
In-place Operators
Many operations have an "in-place" version. Listed below are functionsproviding a more primitive access to in-place operators than the usual syntaxdoes; for example, the statement x += y
is equivalent tox = operator.iadd(x, y)
. Another way to put it is to say thatz = operator.iadd(x, y)
is equivalent to the compound statementz = x; z += y
.
In those examples, note that when an in-place method is called, the computationand assignment are performed in two separate steps. The in-place functionslisted below only do the first step, calling the in-place method. The secondstep, assignment, is not handled.
For immutable targets such as strings, numbers, and tuples, the updatedvalue is computed, but not assigned back to the input variable:
- >>> a = 'hello'
- >>> iadd(a, ' world')
- 'hello world'
- >>> a
- 'hello'
For mutable targets such as lists and dictionaries, the in-place methodwill perform the update, so no subsequent assignment is necessary:
- >>> s = ['h', 'e', 'l', 'l', 'o']
- >>> iadd(s, [' ', 'w', 'o', 'r', 'l', 'd'])
- ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
- >>> s
- ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
operator.
iadd
(a, b)operator.
iadd
(a, b)a = iadd(a, b)
is equivalent toa += b
.operator.
iand
(a, b)a = iand(a, b)
is equivalent toa &= b
.operator.
iconcat
(a, b)a = iconcat(a, b)
is equivalent toa += b
for a and b sequences.operator.
ifloordiv
(a, b)a = ifloordiv(a, b)
is equivalent toa //= b
.operator.
ilshift
(a, b)a = ilshift(a, b)
is equivalent toa <<= b
.operator.
imod
(a, b)a = imod(a, b)
is equivalent toa %= b
.operator.
imul
(a, b)a = imul(a, b)
is equivalent toa *= b
.operator.
imatmul
(a, b)a = imatmul(a, b)
is equivalent toa @= b
.
3.5 新版功能.
operator.
ior
(a, b)operator.
ior
(a, b)a = ior(a, b)
is equivalent toa |= b
.operator.
ipow
(a, b)a = ipow(a, b)
is equivalent toa **= b
.operator.
irshift
(a, b)a = irshift(a, b)
is equivalent toa >>= b
.operator.
isub
(a, b)a = isub(a, b)
is equivalent toa -= b
.operator.
itruediv
(a, b)a = itruediv(a, b)
is equivalent toa /= b
.operator.
ixor
(a, b)a = ixor(a, b)
is equivalent toa ^= b
.