该模块包括3个类和一些常见的运算操作等等。因为该模块是C语言编写的,所以其中方法的运算比直接用python编写要快。方法前后可以有双下滑线,和不带下划线等价,比如add
和__add__
。
operator中的类可以生成模板,自定义顺序访问指定索引的值、指定属性或指定方法。
常用类
itemgetter
生成一个可以从输入对象中获得固定索引的取值的可调用对象。比如:
import operator
a=operator.itemgetter(2) #记录2作为索引
a([2,3,4,5]) #4
b=operator.itemgetter(3,2,1)
b(('a','b','c','d','e')) #('d','c','b')
通过该类可以指定索引和顺序,像是一个模板,将序列中对应索引的值按照模板的顺序输出。
attrgetter
理解了itemgetter,那么attrgetter也就很容易理解了,它生成一个可以从输入对象中获得固定属性的可调用对象。
假如实例r有属性length:
import operator
a=operator.attrgetter('length') #记着加引号
a(r) #r.length
methodcaller
生成一个可以从输入对象中获得固定方法的可调用对象。
import operator
a='123'
b=operator.methodcaller('isalpha') #记着加引号
b(a) #False 等价于a.isalpha()
a=[1,2,3,4,3]
b=operator.methodcaller('count'3) #3是count()的输入参数
b(a) #2 等价于a.count(3)
当需要访问很多不同对象的相同方法或属性,可以借助attrgetter和methodcaller方法生成一个模板,然后调用它。
常用方法
因为operator大部分是常见运算,所以我不用往常介绍+举例的方式了,直接列表对比供各位查阅:
数学计算
operator中的方法 | 意义 |
---|---|
abs | 绝对值 |
add(a, b) | a+b |
sub(a, b) | a-b |
mul(a, b) | a*b |
truediv(a, b) | a/b |
floordiv(a, b) | a//b (取商) |
mod(a, b) | a%b (取模) |
pow(a, b) | a**b (次方) |
neg(a) | -a |
pos(a) | +a |
matmul(a, b) | a@b (矩阵乘法) |
比较、判断运算
operator中的方法 | 意义 |
---|---|
eq(a, b) | a==b |
ne(a, b) | a!=b |
ge(a, b) | a>=b |
gt(a, b) | a>b |
le(a, b) | a<=b |
lt(a, b) | a<b |
not_(a) | not a |
truth(a) | a==True (判断a是否True) |
is_(a, b) | a is b |
is_not(a, b) | a is not b |
位运算
operator中的方法 | 意义 |
---|---|
and_(a, b) | & |
or_(a, b) | | |
xor(a, b) | ^ (异或) |
inv(a),invert(a) | ~ (各位取反) |
lshift(a, b) | << |
rshift(a, b) | >> |
赋值运算
operator中的方法 | 意义 |
---|---|
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 = ifloordiv(a, b) | a //= b |
a = imod(a, b) | a %= b |
a = ipow(a, b) | a **= b |
a = irshift(a, b) | a >>= b |
a = ilshift(a, b) | a <<= b |
a = ior(a, b) | a |= b |
a = iand(a, b) | a &= b |
a = ixor(a, b) | a ^= b |
a = imatmul(a, b) | a @= b |
a = iconcat(a, b) | a += b (a, b是序列) |
序列操作
operator中的方法 | 意义 |
---|---|
concat(a, b) | 拼接两个序列 |
contains(a, b) | b in a |
countOf(a, b) | a中b的次数 |
index(a) | a的索引 |
indexOf(a, b) | a中b的第一个索引 |
delitem(a, b) | del a[b] (删除a[b]) |
getitem(a, b) | a[b] |
setitem(a, b, c) | a[b] = c |
length_hint(obj, default=0) | len(obj) (求序列长度) |