该模块包括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
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) (求序列长度)