日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Python教程:operator—-標(biāo)準(zhǔn)運算符替代函數(shù)

operator —- 標(biāo)準(zhǔ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īng)的高效率函數(shù)。例如,operator.add(x, y) 與表達(dá)式 x+y 相同。 許多函數(shù)名與特殊方法名相同,只是沒有雙下劃線。為了向后兼容性,也保留了許多包含雙下劃線的函數(shù)。為了表述清楚,建議使用沒有雙下劃線的函數(shù)。

函數(shù)包含的種類有:對象的比較運算、邏輯運算、數(shù)學(xué)運算以及序列運算。

對象比較函數(shù)適用于所有的對象,函數(shù)名根據(jù)它們對應(yīng)的比較運算符命名。

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)

ab 之間進(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)于全比較的更多信息請參考 比較運算 。

邏輯運算通常也適用于所有對象,并且支持真值檢測、標(biāo)識檢測和布爾運算:

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é)和按位運算的種類是最多的:

operator.abs(obj)

operator.__abs__(obj)

返回 obj 的絕對值。

operator.add(a, b)

operator.__add__(a, b)

對于數(shù)字 ab,返回 a + b。

operator.and_(a, b)

operator.__and__(a, b)

返回 xy 按位與的結(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ù)字 ab,返回 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)

返回 ab 按位或的結(jié)果。

operator.pos(obj)

operator.__pos__(obj)

返回 obj 取正的結(jié)果 (+obj)。

operator.pow(a, b)

operator.__pow__(a, b)

對于數(shù)字 ab,返回 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)

返回 ab 按位異或的結(jié)果。

適用于序列的操作(其中一些也適用于映射)包括:

operator.concat(a, b)

operator.__concat__(a, b)

對于序列 ab,返回 a + b。

operator.contains(a, b)

operator.__contains__(a, b)

返回 b in a 檢測的結(jié)果。 請注意操作數(shù)是反序的。

operator.countOf(a, b)

返回 ba 中的出現(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)

返回 ba 中首次出現(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)

等價于:

 
 
 
 
  1. def attrgetter(*items):
  2. if any(not isinstance(item, str) for item in items):
  3. raise TypeError('attribute name must be a string')
  4. if len(items) == 1:
  5. attr = items[0]
  6. def g(obj):
  7. return resolve_attr(obj, attr)
  8. else:
  9. def g(obj):
  10. return tuple(resolve_attr(obj, attr) for attr in items)
  11. return g
  12. def resolve_attr(obj, attr):
  13. for name in attr.split("."):
  14. obj = getattr(obj, name)
  15. 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])

等價于:

 
 
 
 
  1. def itemgetter(*items):
  2. if len(items) == 1:
  3. item = items[0]
  4. def g(obj):
  5. return obj[item]
  6. else:
  7. def g(obj):
  8. return tuple(obj[item] for item in items)
  9. return g

傳入的條目可以為操作數(shù)的 __getitem__() 所接受的任何類型。 字典接受任意可哈希的值。 列表、元組和字符串接受 index 或 slice 對象:

 
 
 
 
  1. >>> itemgetter(1)('ABCDEFG')
  2. 'B'
  3. >>> itemgetter(1, 3, 5)('ABCDEFG')
  4. ('B', 'D', 'F')
  5. >>> itemgetter(slice(2, None))('ABCDEFG')
  6. 'CDEFG'
  7. >>> soldier = dict(rank='captain', name='dotterbart')
  8. >>> itemgetter('rank')(soldier)
  9. 'captain'

使用 itemgetter() 從元組的記錄中提取特定字段的例子:

 
 
 
 
  1. >>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
  2. >>> getcount = itemgetter(1)
  3. >>> list(map(getcount, inventory))
  4. [3, 2, 5, 1]
  5. >>> sorted(inventory, key=getcount)
  6. [('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)

等價于:

 
 
 
 
  1. def methodcaller(name, /, *args, **kwargs):
  2. def caller(obj):
  3. return getattr(obj, name)(*args, **kwargs)
  4. return caller

將運算符映射到函數(shù)

以下表格顯示了抽象運算是如何對應(yīng)于 Python 語法中的運算符和 operator 模塊中的函數(shù)的。

運算

語法

函數(shù)

加法

a + b

add(a, b)

字符串拼接

seq1 + seq2

concat(seq1, seq2)

包含測試

obj in seq

contains(seq, obj)

除法

a / b

truediv(a, b)

除法

a // b

floordiv(a, b)

按位與

a & b

and(a, b)

按位異或

a ^ b

xor(a, b)

按位取反

~ a

invert(a)

按位或

a | b

or(a, b)

取冪

a * b

pow(a, b)

標(biāo)識

a is b

is_(a, b)

標(biāo)識

a is not b

is_not(a, b)

索引賦值

obj[k] = v

setitem(obj, k, v)

索引刪除

del obj[k]

delitem(obj, k)

索引取值

obj[k]

getitem(obj, k)

左移

a << b

lshift(a, b)

取模

a % b

mod(a, b)

乘法

a b

mul(a, b)

矩陣乘法

a @ b

matmul(a, b)

取反(算術(shù))

- a

neg(a)

取反(邏輯)

not a

not_(a)

正數(shù)

+ a

pos(a)

右移

a >> b

rshift(a, b)

切片賦值

seq[i:j] = values

setitem(seq, slice(i, j), values)

切片刪除

del seq[i:j]

delitem(seq, slice(i, j))

切片取值

seq[i:j]

getitem(seq, slice(i, j))

字符串格式化

s % obj

mod(s, obj)

減法

a - b

sub(a, b)

真值測試

obj

truth(obj)

比較

a < b

lt(a, b)

比較

a <= b

le(a, b)

相等

a == b

eq(a, b)

不等

a != b

ne(a, b)

比較

a >= b

ge(a, b)

比較

a > b

gt(a, b)

原地運算符

許多運算都有“原地”版本。 以下列出的是提供對原地運算符相比通常語法更底層訪問的函數(shù),例如 statement x += y 相當(dāng)于 x = operator.iadd(x, y)。 換一種方式來講就是 z = operator.iadd(x, y) 等價于語句塊 z = x; z += y。

在這些例子中,請注意當(dāng)調(diào)用一個原地方法時,運算和賦值是分成兩個步驟來執(zhí)行的。 下面列出的原地函數(shù)只執(zhí)行第一步即調(diào)用原地方法。 第二步賦值則不加處理。

對于不可變的目標(biāo)例如字符串、數(shù)字和元組,更新的值會被計算,但不會被再被賦值給輸入變量:

 
 
 
 
  1. >>> a = 'hello'
  2. >>> iadd(a, ' world')
  3. 'hello world'
  4. >>> a
  5. 'hello'

對于可變的目標(biāo)例如列表和字典,原地方法將執(zhí)行更新,因此不需要后續(xù)賦值操作:

 
 
 
 
  1. >>> s = ['h', 'e', 'l', 'l', 'o']
  2. >>> iadd(s, [' ', 'w', 'o', 'r', 'l', 'd'])
  3. ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
  4. >>> s
  5. ['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 其中 ab 為序列。

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。


文章標(biāo)題:創(chuàng)新互聯(lián)Python教程:operator—-標(biāo)準(zhǔn)運算符替代函數(shù)
網(wǎng)頁地址:http://www.dlmjj.cn/article/dhddide.html