python operator — 標準函數操作

喵喵喵。。。

本文翻譯自: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 (ab 都是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 ( ab 都是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以上版本出現



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章