新聞中心
operator —- 標(biāo)準(zhǔn)運(yùn)算符替代函數(shù)
源代碼: Lib/operator.py

目前成都創(chuàng)新互聯(lián)已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、西山網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
operator 模塊提供了一套與python的內(nèi)置運(yùn)算符對應(yīng)的高效率函數(shù)。例如,operator.add(x, y) 與表達(dá)式 x+y 相同。 許多函數(shù)名與特殊方法名相同,只是沒有雙下劃線。為了向后兼容性,也保留了許多包含雙下劃線的函數(shù)。為了表述清楚,建議使用沒有雙下劃線的函數(shù)。
函數(shù)包含的種類有:對象的比較運(yùn)算、邏輯運(yùn)算、數(shù)學(xué)運(yùn)算以及序列運(yùn)算。
對象比較函數(shù)適用于所有的對象,函數(shù)名根據(jù)它們對應(yīng)的比較運(yùn)算符命名。
operator.lt(a, b)
operator.le(a, b)
operator.eq(a, b)
operator.ne(a, b)
operator.ge(a, b)
operator.gt(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)
在 a 和 b 之間進(jìn)行全比較。具體的,lt(a, b) 與 a < b 相同, le(a, b) 與 a <= b 相同,eq(a, b) 與 a == b 相同,ne(a, b) 與 a != b 相同,gt(a, b) 與 a > b 相同,ge(a, b)``與 ``a >= b 相同。注意這些函數(shù)可以返回任何值,無論它是否可當(dāng)作布爾值。關(guān)于全比較的更多信息請參考 比較運(yùn)算 。
邏輯運(yùn)算通常也適用于所有對象,并且支持真值檢測、標(biāo)識檢測和布爾運(yùn)算:
operator.not_(obj)
operator.__not__(obj)
返回 not obj 的結(jié)果。 (請注意對象實例并沒有 __not__() 方法;只有解釋器核心可定義此操作。 結(jié)果會受 __bool__() 和 __len__() 方法影響。)
operator.truth(obj)
如果 obj 為真值則返回 True,否則返回 False。 這等價于使用 bool 構(gòu)造器。
operator.is_(a, b)
返回 a is b。 檢測對象標(biāo)識。
operator.is_not(a, b)
返回 a is not b。 檢測對象標(biāo)識。
數(shù)學(xué)和按位運(yùn)算的種類是最多的:
operator.abs(obj)
operator.__abs__(obj)
返回 obj 的絕對值。
operator.add(a, b)
operator.__add__(a, b)
對于數(shù)字 a 和 b,返回 a + b。
operator.and_(a, b)
operator.__and__(a, b)
返回 x 和 y 按位與的結(jié)果。
operator.floordiv(a, b)
operator.__floordiv__(a, b)
返回 a // b。
operator.index(a)
operator.__index__(a)
返回 a 轉(zhuǎn)換為整數(shù)的結(jié)果。 等價于 a.__index__()。
在 3.10 版更改: 結(jié)果總是為 int 類型。 在之前版本中,結(jié)果可能為 int 的子類的實例。
operator.inv(obj)
operator.invert(obj)
operator.__inv__(obj)
operator.__invert__(obj)
返回數(shù)字 obj 按位取反的結(jié)果。 這等價于 ~obj。
operator.lshift(a, b)
operator.__lshift__(a, b)
返回 a 左移 b 位的結(jié)果。
operator.mod(a, b)
operator.__mod__(a, b)
返回 a % b。
operator.mul(a, b)
operator.__mul__(a, b)
對于數(shù)字 a 和 b,返回 a * b。
operator.matmul(a, b)
operator.__matmul__(a, b)
返回 a @ b。
3.5 新版功能.
operator.neg(obj)
operator.__neg__(obj)
返回 obj 取負(fù)的結(jié)果 (-obj)。
operator.or_(a, b)
operator.__or__(a, b)
返回 a 和 b 按位或的結(jié)果。
operator.pos(obj)
operator.__pos__(obj)
返回 obj 取正的結(jié)果 (+obj)。
operator.pow(a, b)
operator.__pow__(a, b)
對于數(shù)字 a 和 b,返回 a ** b。
operator.rshift(a, b)
operator.__rshift__(a, b)
返回 a 右移 b 位的結(jié)果。
operator.sub(a, b)
operator.__sub__(a, b)
返回 a - b。
operator.truediv(a, b)
operator.__truediv__(a, b)
返回 a / b 例如 2/3 將等于 .66 而不是 0。 這也被稱為“真”除法。
operator.xor(a, b)
operator.__xor__(a, b)
返回 a 和 b 按位異或的結(jié)果。
適用于序列的操作(其中一些也適用于映射)包括:
operator.concat(a, b)
operator.__concat__(a, b)
對于序列 a 和 b,返回 a + b。
operator.contains(a, b)
operator.__contains__(a, b)
返回 b in a 檢測的結(jié)果。 請注意操作數(shù)是反序的。
operator.countOf(a, b)
返回 b 在 a 中的出現(xiàn)次數(shù)。
operator.delitem(a, b)
operator.__delitem__(a, b)
移除 a 中索引號為 b 的值。
operator.getitem(a, b)
operator.__getitem__(a, b)
返回 a 中索引為 b 的值。
operator.indexOf(a, b)
返回 b 在 a 中首次出現(xiàn)所在的索引號。
operator.setitem(a, b, c)
operator.__setitem__(a, b, c)
將 a 中索引號為 b 的值設(shè)為 c。
operator.length_hint(obj, default=0)
返回對象 o 的估計長度。 首先嘗試返回其實際長度,再使用 object.__length_hint__() 得出估計值,最后返回默認(rèn)值。
3.4 新版功能.
The following operation works with callables:
operator.call(obj, /, \args, **kwargs*)
operator.__call__(obj, /, \args, **kwargs*)
Return obj(*args, **kwargs).
3.11 新版功能.
operator 模塊還定義了一些用于常規(guī)屬性和條目查找的工具。 這些工具適合用來編寫快速字段提取器作為 map(), sorted(), itertools.groupby() 或其他需要相應(yīng)函數(shù)參數(shù)的函數(shù)的參數(shù)。
operator.attrgetter(attr)
operator.attrgetter(\attrs*)
返回一個可從操作數(shù)中獲取 attr 的可調(diào)用對象。 如果請求了一個以上的屬性,則返回一個屬性元組。 屬性名稱還可包含點號。 例如:
-
在
f = attrgetter('name')之后,調(diào)用f(b)將返回b.name。 -
在
f = attrgetter('name', 'date')之后,調(diào)用f(b)將返回(b.name, b.date)。 -
在
f = attrgetter('name.first', 'name.last')之后,調(diào)用f(b)將返回(b.name.first, b.name.last)。
等價于:
def attrgetter(*items):if any(not isinstance(item, str) for item in items):raise TypeError('attribute name must be a string')if len(items) == 1:attr = items[0]def g(obj):return resolve_attr(obj, attr)else:def g(obj):return tuple(resolve_attr(obj, attr) for attr in items)return gdef resolve_attr(obj, attr):for name in attr.split("."):obj = getattr(obj, name)return obj
operator.itemgetter(item)
operator.itemgetter(\items*)
返回一個使用操作數(shù)的 __getitem__() 方法從操作數(shù)中獲取 item 的可調(diào)用對象。 如果指定了多個條目,則返回一個查找值的元組。 例如:
-
在
f = itemgetter(2)之后,調(diào)用f(r)將返回r[2]。 -
在
g = itemgetter(2, 5, 3)之后,調(diào)用g(r)將返回(r[2], r[5], r[3])。
等價于:
def itemgetter(*items):if len(items) == 1:item = items[0]def g(obj):return obj[item]else:def g(obj):return tuple(obj[item] for item in items)return g
傳入的條目可以為操作數(shù)的 __getitem__() 所接受的任何類型。 字典接受任意可哈希的值。 列表、元組和字符串接受 index 或 slice 對象:
>>> itemgetter(1)('ABCDEFG')'B'>>> itemgetter(1, 3, 5)('ABCDEFG')('B', 'D', 'F')>>> itemgetter(slice(2, None))('ABCDEFG')'CDEFG'>>> soldier = dict(rank='captain', name='dotterbart')>>> itemgetter('rank')(soldier)'captain'
使用 itemgetter() 從元組的記錄中提取特定字段的例子:
>>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]>>> getcount = itemgetter(1)>>> list(map(getcount, inventory))[3, 2, 5, 1]>>> sorted(inventory, key=getcount)[('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]
operator.methodcaller(name, /, \args, **kwargs*)
返回一個在操作數(shù)上調(diào)用 name 方法的可調(diào)用對象。 如果給出額外的參數(shù)和/或關(guān)鍵字參數(shù),它們也將被傳給該方法。 例如:
-
在
f = methodcaller('name')之后,調(diào)用f(b)將返回b.name()。 -
在
f = methodcaller('name', 'foo', bar=1)之后,調(diào)用f(b)將返回b.name('foo', bar=1)。
等價于:
def methodcaller(name, /, *args, **kwargs):def caller(obj):return getattr(obj, name)(*args, **kwargs)return caller
將運(yùn)算符映射到函數(shù)
以下表格顯示了抽象運(yùn)算是如何對應(yīng)于 Python 語法中的運(yùn)算符和 operator 模塊中的函數(shù)的。
|
運(yùn)算 |
語法 |
函數(shù) |
|---|---|---|
加法 |
|
|
字符串拼接 |
|
|
包含測試 |
|
|
除法 |
|
|
除法 |
|
|
按位與 |
|
|
按位異或 |
|
|
按位取反 |
|
|
按位或 |
|
|
取冪 |
|
|
標(biāo)識 |
|
|
標(biāo)識 |
|
|
索引賦值 |
|
|
索引刪除 |
|
|
索引取值 |
|
|
左移 |
|
|
取模 |
|
|
乘法 |
|
|
矩陣乘法 |
|
|
取反(算術(shù)) |
|
|
取反(邏輯) |
|
|
正數(shù) |
|
|
右移 |
|
|
切片賦值 |
|
|
切片刪除 |
|
|
切片取值 |
|
|
字符串格式化 |
|
|
減法 |
|
|
真值測試 |
|
|
比較 |
|
|
比較 |
|
|
相等 |
|
|
不等 |
|
|
比較 |
|
|
比較 |
|
|
原地運(yùn)算符
許多運(yùn)算都有“原地”版本。 以下列出的是提供對原地運(yùn)算符相比通常語法更底層訪問的函數(shù),例如 statement x += y 相當(dāng)于 x = operator.iadd(x, y)。 換一種方式來講就是 z = operator.iadd(x, y) 等價于語句塊 z = x; z += y。
在這些例子中,請注意當(dāng)調(diào)用一個原地方法時,運(yùn)算和賦值是分成兩個步驟來執(zhí)行的。 下面列出的原地函數(shù)只執(zhí)行第一步即調(diào)用原地方法。 第二步賦值則不加處理。
對于不可變的目標(biāo)例如字符串、數(shù)字和元組,更新的值會被計算,但不會被再被賦值給輸入變量:
>>> a = 'hello'>>> iadd(a, ' world')'hello world'>>> a'hello'
對于可變的目標(biāo)例如列表和字典,原地方法將執(zhí)行更新,因此不需要后續(xù)賦值操作:
>>> s = ['h', 'e', 'l', 'l', 'o']>>> iadd(s, [' ', 'w', 'o', 'r', 'l', 'd'])['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']>>> s['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
operator.iadd(a, b)
operator.__iadd__(a, b)
a = iadd(a, b) 等價于 a += b。
operator.iand(a, b)
operator.__iand__(a, b)
a = iand(a, b) 等價于 a &= b。
operator.iconcat(a, b)
operator.__iconcat__(a, b)
a = iconcat(a, b) 等價于 a += b 其中 a 和 b 為序列。
operator.ifloordiv(a, b)
operator.__ifloordiv__(a, b)
a = ifloordiv(a, b) 等價于 a //= b。
operator.ilshift(a, b)
operator.__ilshift__(a, b)
a = ilshift(a, b) 等價于 a <<= b。
operator.imod(a, b)
operator.__imod__(a, b)
a = imod(a, b) 等價于 a %= b。
operator.imul(a, b)
operator.__imul__(a, b)
a = imul(a, b) 等價于 a *= b。
operator.imatmul(a, b)
operator.__imatmul__(a, b)
a = imatmul(a, b) 等價于 a @= b。
3.5 新版功能.
operator.ior(a, b)
operator.__ior__(a, b)
a = ior(a, b) 等價于 a |= b。
operator.ipow(a, b)
operator.__ipow__(a, b)
a = ipow(a, b) 等價于 a **= b。
operator.irshift(a, b)
operator.__irshift__(a, b)
a = irshift(a, b) 等價于 a >>= b。
operator.isub(a, b)
operator.__isub__(a, b)
a = isub(a, b) 等價于 a -= b。
operator.itruediv(a, b)
operator.__itruediv__(a, b)
a = itruediv(a, b) 等價于 a /= b。
operator.ixor(a, b)
operator.__ixor__(a, b)
a = ixor(a, b) 等價于 a ^= b。
當(dāng)前標(biāo)題:創(chuàng)新互聯(lián)Python教程:operator—-標(biāo)準(zhǔn)運(yùn)算符替代函數(shù)
網(wǎng)站網(wǎng)址:http://fisionsoft.com.cn/article/dhddide.html


咨詢
建站咨詢
