operator---标准运算符替代函数
模块提供了一套与Python的内置运算符对应的高效率函数。 许多函数名与特殊方法名相同,只是没有双下划线。为了向后兼容性,也保留了许多包含双下划线的函数。为了表述清楚,建议使用没有双下划线的函数。
函数包含的种类有:对象的比较运算、逻辑运算、数学运算以及序列运算。
对象比较函数适用于所有的对象,函数名根据它们对应的比较运算符命名。
1、运算符对应operator模块中的函数
| 运算 | 语法 | 函数 |
| 加法 | 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) |
| 标识 | a is b | is_(a,b) |
| 标识 | 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) |
| 算数取反 | -a | neg(a) |
| 逻辑取反 | not a | not_(a) |
| 正数 | +a | pos(a) |
| 右移 | a>>b | rshift(a,b) |
| 切片赋值 | seq[i:j]=values | setitem(seq,slice(i,j),values |
| 切片取值 | seq[i:j] | getitem(seq,slice(i,j)) |
| 切片删除 | del seq[i:j] | delitem(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) |
2、方法和属性
除表格中的方法以外,还有以下方法。
1)abs(obj):返回obj绝对值
2)index(a):返回a转换为整数的结果。等价于a.__index__(a)
3)countOf(a,b):返回b在a中的出现次数
4)indexOf(a,b):返回b在a中首次出现的索引号
5)length_hint(obj,default=0):返回对象 o 的估计长度。 首先尝试返回其实际长度,再使用 object.__length_hint__() 得出估计值,最后返回默认值。
6)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)。
7)itemgetter(*items):返回一个使用操作数的__getitem__()方法从操作数中获取item的可调用对象,如果指定多个条目,则返回一个查找值的元组。
在f=itemgetter(2)之后,调用f(r)将返回r[2].
在g=itemgetter(2,5,3)之后,调用g(r)将返回(r[2],r[5],r[3])
传入的条目可以为操作数的 __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)]
8)methodcaller(name,/,*args,**kwargs):返回一个在操作数上调用name方法的可调用对象,如果给出额外的参数和/或关键字参数,他们也将被传给该方法。
在f=methodcaller('name')之后,调用f(b)将返回b.name()
在f=methodcaller('name','foo',bar=1)之后,调用f(b)将返回b.name('foo',bar=1)
9)iadd(a,b):a=iadd(a,b)等价于a+=b
10)iand(a,b):a=iand(a,b)等价于a&=b
11)iconcat(a,b):a=iconcat(a,b)等价于a+=b,a和b为序列
12)ifoordiv(a,b):a=ifoordiv(a,b)等价于a//=b
13)ilshift(a,b):a=ilshift(a,b)等价于a<<=b
14)imod(a,b):a=imod(a,b)等价于a%=b
15)imul(a,b):a=imul(a,b)等价于a*=b
16)imatmul(a,b):a=imatmul(a,b)等价于a@=b
17)ior(a,b):a=ior(a,b)等价于a|=b
18)ipow(a,b):a=ipow(a,b)等价于a**=b
19)irshift(a,b):a=irshift(a,b)等价于a>>=b
20)isub(a,b):a=isub(a,b)等价于a-=b
21)itruediv(a,b):a=itruediv(a,b)等价于a/=b
22)ixor(a,b):a=ixor(a,b)等价于a^=b
本文介绍了Python中operator模块,它提供了与内置运算符对应的高效率函数,包含对象比较、逻辑、数学和序列运算等函数。还列举了该模块的多种方法和属性,如abs、index、countOf等,以及它们的功能和使用示例。
1012

被折叠的 条评论
为什么被折叠?



