operator 模块,没有什么特殊的,简单说就是把常用的数学计算符号(+,-,*,**,/,<<,>>等)逻辑运算(or,and,xor,is,is_not)等以函数形式表示了。此外还有一些对序列(sequence)的操作函数,对对象的操作函数。所有这些函数都是可以在编写自己的类的时候定义的(前后“__”),定义后就可以直接用符号进行运算。
1、模块特殊函数:都返回一个可调用对象,可以用于 map(), sorted(), itertools.groupby() 等接受一个函数对象作为参数的函数
operator.attrgetter(*attrs):返回对象的对应属性
operator.itemgetter(*items):返回对象对应位置的值,相当于 __getitem__() 方法
operator.methodcaller(name[, args...]):返回对象的对应方法函数,额外输入的 args 会作为此方法的默认参数
2、模块常规函数及对应符号:
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 | obj[k] = v |
setitem(obj, k, v) |
Indexed Deletion | del obj[k] |
delitem(obj, k) |
Indexing | obj[k] |
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 | seq[i:j] = values |
setitem(seq, slice(i, j), values) |
Slice Deletion | del seq[i:j] |
delitem(seq, slice(i, j)) |
Slicing | seq[i: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) |
3、混合赋值函数都是在对应操作方法前加个 i,and、or、is 还要把结尾的“_”去掉