自学Python标准库(5)

本文介绍了Python中operator模块,它提供了与内置运算符对应的高效率函数,包含对象比较、逻辑、数学和序列运算等函数。还列举了该模块的多种方法和属性,如abs、index、countOf等,以及它们的功能和使用示例。

operator---标准运算符替代函数

        模块提供了一套与Python的内置运算符对应的高效率函数。 许多函数名与特殊方法名相同,只是没有双下划线。为了向后兼容性,也保留了许多包含双下划线的函数。为了表述清楚,建议使用没有双下划线的函数。

        函数包含的种类有:对象的比较运算、逻辑运算、数学运算以及序列运算。

        对象比较函数适用于所有的对象,函数名根据它们对应的比较运算符命名。

1、运算符对应operator模块中的函数

运算语法函数
加法a+badd(a,b)
字符串拼接seq1+seq2 concat(seq1+seq2)
包含obj in seqcontains(seq,obj)
除法a/btruediv(a,b)
整除a//bfloordiv(a,b)
按位与a&band_(a,b)
按位异或a^bxor(a,b)
按位取反~ainvert(a)
按位或a|bor_(a,b)
取幂a**bpow(a,b)
标识a is bis_(a,b)
标识a is not bis_not(a,b)
索引赋值obj[k]=vsetitem(obj,k,v)
索引删除del obj[k]delitem(obj,k)
索引取值obj[k]getitem(obj,k)
左移a<<blshift(a,b)
取模a%bmod(a,b)
乘法a*bmul(a,b)
矩阵乘法a@bmatmul(a,b)
算数取反-aneg(a)
逻辑取反not anot_(a)
正数+apos(a)
右移a>>brshift(a,b)
切片赋值seq[i:j]=valuessetitem(seq,slice(i,j),values
切片取值seq[i:j]getitem(seq,slice(i,j))
切片删除del seq[i:j]delitem(seq,slice(i,j))
字符串格式化s%objmod(s,obj)
减法a-bsub(a,b)
真值测试objtruth(obj)
比较a<blt(a,b)
比较a<=ble(a,b)
等于a==beq(a,b)
不等a!=bne(a,b)
比较a>=bge(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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值