喵喵喵。。。
本文翻譯自:https://docs.python.org/2.7/library/operator.html 如有錯誤之處,歡迎大家指出!
Operator模塊提供了一系列與Python自帶操作一樣有效的函數。例如:operator.add(x, y)和表達式x+y是等效的。那些特殊類的方法都有自己的函數名;爲了方便起見,一些函數名是沒有前導和後置(__)。 在接下來討論的函數涉及對象比較,邏輯運算,數學運算,隊列操作和抽象類型測試。對象比較函數對所有對象都適用,並且都以他們所支持的豐富的比較操作而命名。
operator.lt(a, b) #等價於a<b
operator.le(a, b) #等價於a<=b
operator.eq(a, b) #等價於a==b
operator.ne(a, b) <span style="font-family: Arial, Helvetica, sans-serif;">#等價於a!=b</span>
operator.ge(a, b)<span style="white-space:pre"> </span> #等價於a>=b
operator.gt(a, b)<span style="white-space:pre"> </span> #等價於a>b
operator.__lt__(a, b)
operator.__le__(a, b)
operator.__eq__(a, b)
operator.__ne__(a, b)
operator.__ge__(a, b)
operator.__gt__(a, b)
豐富的比較操作(rich comparison) 注意:不同於內建的cmp()函數,以上這些函數可以返回任何類型,也就是說,返回值可以是也可以不是布爾值。點擊 Comparison 來查看更多關於rich comparison
在Python 2.2 以上版本可用。
邏輯操作一般來說也可以應用在所有的,不同類型的值(value)上, 同時支持真值檢驗, 等式檢驗, 布爾操作:
operator.not_(obj)¶
operator.__not__(obj)¶
返回 not obj的結果. (注意現在沒有__not__()這個對於對象的方法; 只有解釋器核心定義了這個方法。 結果受到__nonzero__()和__len__()這兩個方法影響)
operator.truth(obj)¶
返回 True 如果對象是真的, 否則返回False. 這和使用bool 構造器是一樣的.
operator.is_(a, b)¶
返回 ais b的結果. 檢驗對象是否相等.
operator.is_not(a, b)¶
返回 ais not b的結果. 檢驗對象是否相等.
在Python2.3以上版本出現.
大量數學操作和按位運算:
operator.abs(obj)¶
operator.__abs__(obj)¶
返回對象的絕對值.
operator.add(a, b)¶
operator.__add__(a, b)¶
返回 a+ b, (a,b爲數字).
operator.and_(a, b)¶
operator.__and__(a, b)¶
返回 a&b(位運算).
operator.div(a, b)¶
operator.__div__(a, b)¶
返回 a/ b (當沒有使用 __future__.division.時) 經典除法.
operator.floordiv(a, b)¶
operator.__floordiv__(a, b)¶
返回 a// b.
在python2.2以上版本出現
operator.index(a)¶
operator.__index__(a)¶
返回 a的下表. 等同於 a.__index__().
在python2.5以上版本出現
operator.inv(obj)¶
operator.invert(obj)¶
operator.__inv__(obj)¶
operator.__invert__(obj)¶
返回對 obj對象按位取反的值. 等同於 ~obj.
在python2.0以上版本出現: 更名爲invert() 和__invert__().
operator.lshift(a, b)¶
operator.__lshift__(a, b)¶
返回a左移b的值.
operator.mod(a, b)¶
operator.__mod__(a, b)¶
返回 a% b的值.
operator.mul(a, b)¶
operator.__mul__(a, b)¶
返回 a* b, (a,b爲數字).
operator.neg(obj)¶
operator.__neg__(obj)¶
返回 obj 對象的相反數(-obj).
operator.or_(a, b)¶
operator.__or__(a, b)¶
返回 a | b.
operator.pos(obj)¶
operator.__pos__(obj)¶
返回obj對的正數 (+obj).
operator.pow(a, b)¶
operator.__pow__(a, b)¶
返回 a** b(乘方), (a,b爲數字).
在python2.3版本出現
operator.rshift(a, b)¶
operator.__rshift__(a, b)¶
返回a右移b的值.
operator.sub(a, b)¶
operator.__sub__(a, b)¶
返回 a– b的值.
operator.truediv(a, b)¶
operator.__truediv__(a, b)¶
返回 a/ b (當啓用__future__.division 時. )這也被稱爲正除法
在python2.2版本以上出現.
operator.xor(a, b)¶
operator.__xor__(a, b)¶
返回按位操作 ~(a & b)
隊列操作 (其中一些包含 mapping) 包括:
operator.concat(a, b)¶
operator.__concat__(a, b)¶
返回 a+ b (a 和 b 都是sequences).
operator.contains(a, b)¶
operator.__contains__(a, b)¶
返回 bin a操作的結果. 注意反向操作數.
在python2.0版本出現: 更名爲 __contains__().
operator.countOf(a, b)¶
返回b在a中出現的次數.
operator.delitem(a, b)¶
operator.__delitem__(a, b)¶
刪除在a中下標爲b的值.
operator.delslice(a, b, c)¶
operator.__delslice__(a, b, c)¶
在a中刪除下標b到c-1的值.
從2.6版本刪除: 這個函數在Python 3.x被移去. 使用delitem()
operator.getitem(a, b)¶
operator.__getitem__(a, b)¶
返回a中下標爲b的值.
operator.getslice(a, b, c)¶
operator.__getslice__(a, b, c)¶
返回a中從下標b到c-1的一個片段
從2.6版本開始不再支持: 在Python 3.x中被移去. 使用getitem()
operator.indexOf(a, b)¶
返回a中b第一次出現的下表.
operator.repeat(a, b)¶
operator.__repeat__(a, b)¶
從2.7版本開始不再支持: 使用 __mul__()作爲替代.
返回 a* b, (a 是一個隊列 , b 是整數.)
operator.sequenceIncludes(...)¶
從2.0版本開始不再支持:使用 contains() 作爲替代.
operator.setitem(a, b, c)¶
operator.__setitem__(a, b, c)¶
把a中下標爲b的值改成c
operator.setslice(a, b, c, v)¶
operator.__setslice__(a, b, c, v)¶
把a中從下表b到c-1的片段改成隊列v
從2.6版本開始不再支持: 在 Python 3.x中被移除. 使用setitem() 加上片段下標.
使用實例
>>>
>>> # Elementwise multiplication
>>> map(mul, [0, 1, 2, 3], [10, 20, 30, 40])
[0, 20, 60, 120]
>>> # Dot product
>>> sum(map(mul, [0, 1, 2, 3], [10, 20, 30, 40]))
200
許多操作都有一個替代版本. 以下函數 提供了一個比通常表達式更原始的替代操作方法。比如, x += y 等同於 x = operator.iadd(x, y). 另一種操作方法是 z = operator.iadd(x, y) 等同於組合表達式 z = x; z += y.
operator.iadd(a, b)¶
operator.__iadd__(a, b)¶
a = iadd(a, b) 等同於 a += b.
在2.5以上版本出現
operator.iand(a, b)¶
operator.__iand__(a, b)¶
a = iand(a, b) 等同於 a &= b.
在 2.5以上版本出現.
operator.iconcat(a, b)¶
operator.__iconcat__(a, b)¶
a = iconcat(a, b) 等同於 a += b ( a 和b 都是sequences).
在 2.5以上版本出現.
operator.idiv(a, b)¶
operator.__idiv__(a, b)¶
a = idiv(a, b) 等同於o a /= b (當未使用 __future__.division.時)
在 2.5以上版本出現.
operator.ifloordiv(a, b)¶
operator.__ifloordiv__(a, b)¶
a = ifloordiv(a, b) 等同於 a //= b.
在 2.5以上版本出現.
operator.ilshift(a, b)¶
operator.__ilshift__(a, b)¶
a = ilshift(a, b) 等同於 a <<= b.
在 2.5以上版本出現.
operator.imod(a, b)¶
operator.__imod__(a, b)¶
a = imod(a, b) 等同於 a %= b.
在 2.5以上版本出現.
operator.imul(a, b)¶
operator.__imul__(a, b)¶
a = imul(a, b) 等同於 a *= b.
在 2.5以上版本出現.
operator.ior(a, b)¶
operator.__ior__(a, b)¶
a = ior(a, b) 等同於 a |= b.
在 2.5以上版本出現.
operator.ipow(a, b)¶
operator.__ipow__(a, b)¶
a = ipow(a, b) 等同於 a **= b.
在 2.5以上版本出現
operator.irepeat(a, b)¶
operator.__irepeat__(a, b)¶
從2.7版本開始不再支持:使用 __imul__() 來替代.
a = irepeat(a, b) 等同於 a *= b (a 是 sequenceb 是 integer.)
在 2.5以上版本出現
operator.irshift(a, b)¶
operator.__irshift__(a, b)¶
a = irshift(a, b) 等同於 a >>= b.
在 2.5以上版本出現
operator.isub(a, b)¶
operator.__isub__(a, b)¶
a = isub(a, b) 等同於 a -= b.
在 2.5以上版本出現
operator.itruediv(a, b)¶
operator.__itruediv__(a, b)¶
a = itruediv(a, b) 等同於 a /= b (當使用 __future__.division時)
在 2.5以上版本出現
operator.ixor(a, b)¶
operator.__ixor__(a, b)¶
a = ixor(a, b) 等同於 a ^= b.
在 2.5以上版本出現
operator 模塊 也定義了一些 斷言 來檢驗對象類型; 但是, 不是所有斷言都很可靠. (查看collections和 numbers 以獲取更多信息).
operator.isCallable(obj)¶
從2.0版本開始不再支持: 使用isinstance(x, collections.Callable)作爲替代.
返回true如果對象obj 可以像函數一樣被調用, 否則返回false. True 返回給函數可以選擇是否綁定方法, 類對象, 和支持 __call__()方法的對象.
operator.isMappingType(obj)¶
從2.7版本開始不再支持: 使用 isinstance(x,collections.Mapping)作爲替代.
返回true 如果對象 obj 支持mapping接口. 對於dictionaries 和 所有例對象定義的__getitem__()都返回true.
operator.isNumberType(obj)¶
從2.7版本開始不再支持:使用 isinstance(x,numbers.Number) 替代。
返回true 如果對象 obj 代表一個數. 對所有 用c實現的數據類型都返回true.
operator.isSequenceType(obj)¶
從2.7版本開始不再支持:使用isinstance(x, collections.Sequence) 作爲替代.
返回true如果對象obj 支持 隊列協議. 對於所有用C隊列方法實現的對象,和所有定義了__getitem__().的例對象都返回true
operator 模塊 也爲廣義屬性和查找對象定義了工具. 這些爲快速定義map(), sorted(),itertools.groupby()或者其他函數的提取器提供了有用的幫助,。
operator.attrgetter(attr)¶
operator.attrgetter(*attrs)
返回一個可以從attr中提取運算符的對象. 如果要求多於一個屬性, 則返回一個屬性元組. 屬性名稱可以包含(.). 例如:
f = attrgetter('name'), 調用 f(b) 返回 b.name.
f = attrgetter('name', 'date'), 調用 f(b) 返回 (b.name, b.date).
f = attrgetter('name.first', 'name.last'), 調用 f(b) 返回 (b.name.first, b.name.last).
等價於
defattrgetter(*items):
iflen(items) ==1:
attr = items[0]
defg(obj):
return resolve_attr(obj, attr)
else:
defg(obj):
returntuple(resolve_attr(obj, attr) for attr in items)
return g
defresolve_attr(obj, attr):
for name in attr.split("."):
obj =getattr(obj, name)
return obj
在2.4以上版本出現.
在2.5版本有改動: 添加支持多種屬性.
在2.6版本有改動:添加支持域屬性.
operator.itemgetter(item)¶
operator.itemgetter(*items)
通過使用 __getitem__() 方法,返回 一個可以調用的對象( 可以從操作對象中提取item). 如果要求多個item,返回一個查找關鍵詞的元組. 例如:
f = itemgetter(2), 調用 f(r) 返回 r[2].
g = itemgetter(2, 5, 3), 調用 g(r) 返回 (r[2],r[5], r[3]).
等同於
defitemgetter(*items):
iflen(items) ==1:
item = items[0]
defg(obj):
return obj[item]
else:
defg(obj):
returntuple(obj[item] for item in items)
return g
items 可以是任何能被 __getitem__()方法操作的類型. 字典接受任何哈希值. Lists, tuples, 和 strings 接受下表和分片:
>>> itemgetter(1)('ABCDEFG')
'B'
>>> itemgetter(1,3,5)('ABCDEFG')
('B','D', 'F')
>>> itemgetter(slice(2,None))('ABCDEFG')
'CDEFG'
在 2.4以上版本出現.
在2.5版本有改動: 添加支持多項提取.
例如使用 itemgetter() 來 對元組操作
>>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
>>> getcount = itemgetter(1)
>>> map(getcount,inventory)
[3, 2,5, 1]
>>> sorted(inventory,key=getcount)
[('orange',1), ('banana', 2), ('apple', 3), ('pear', 5)]
operator.methodcaller(name[, args...])¶
返回一個 可以調用的對象 (調用所提供的操作)例如:
f = methodcaller('name'), 調用f(b) 返回 b.name().
f = methodcaller('name', 'foo', bar=1), 調用 f(b) 返回 b.name('foo', bar=1).
等同於:
defmethodcaller(name, *args, **kwargs):
defcaller(obj):
returngetattr(obj, name)(*args, **kwargs)
return caller
在2.6以上版本出現