python——operator模塊

該模塊包括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) (求序列長度)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章