該模塊包括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) (求序列長度) |