python——operator模块

本文介绍了Python的operator模块,包括itemgetter、attrgetter和methodcaller三个类,用于快速访问对象的索引、属性和方法。此外,还概述了模块中的数学计算、比较判断、位运算、赋值运算及序列操作等常用方法。这些方法由于是C编写的,因此执行效率较高。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该模块包括3个类和一些常见的运算操作等等。因为该模块是C语言编写的,所以其中方法的运算比直接用python编写要快。方法前后可以有双下滑线,和不带下划线等价,比如add__add__
operator中的类可以生成模板,自定义顺序访问指定索引的值、指定属性或指定方法。

常用类
itemgetter

生成一个可以从输入对象中获得固定索引的取值的可调用对象。比如:

import operator
a=operator.itemgetter(2)   #记录2作为索引
a([2,3,4,5])   #4

b=operator.itemgetter(3,2,1)
b(('a','b','c','d','e'))   #('d','c','b')

通过该类可以指定索引和顺序,像是一个模板,将序列中对应索引的值按照模板的顺序输出。

attrgetter

理解了itemgetter,那么attrgetter也就很容易理解了,它生成一个可以从输入对象中获得固定属性的可调用对象。

假如实例r有属性length:

import operator
a=operator.attrgetter('length')   #记着加引号
a(r)   #r.length 
methodcaller

生成一个可以从输入对象中获得固定方法的可调用对象。

import operator
a='123'
b=operator.methodcaller('isalpha')  #记着加引号
b(a)   #False  等价于a.isalpha()   

a=[1,2,3,4,3]
b=operator.methodcaller('count'3)   #3是count()的输入参数
b(a)  #2   等价于a.count(3)  

当需要访问很多不同对象的相同方法或属性,可以借助attrgetter和methodcaller方法生成一个模板,然后调用它。

常用方法

因为operator大部分是常见运算,所以我不用往常介绍+举例的方式了,直接列表对比供各位查阅:

数学计算
operator中的方法意义
abs绝对值
add(a, b)a+b
sub(a, b)a-b
mul(a, b)a*b
truediv(a, b)a/b
floordiv(a, b)a//b (取商)
mod(a, b)a%b (取模)
pow(a, b)a**b (次方)
neg(a)-a
pos(a)+a
matmul(a, b)a@b (矩阵乘法)
比较、判断运算
operator中的方法意义
eq(a, b)a==b
ne(a, b)a!=b
ge(a, b)a>=b
gt(a, b)a>b
le(a, b)a<=b
lt(a, b)a<b
not_(a)not a
truth(a)a==True (判断a是否True)
is_(a, b)a is b
is_not(a, b)a is not b
位运算
operator中的方法意义
and_(a, b)&
or_(a, b)|
xor(a, b)^ (异或)
inv(a),invert(a)~ (各位取反)
lshift(a, b)<<
rshift(a, b)>>
赋值运算
operator中的方法意义
a=iadd(a, b)a += b
a=isub(a, b)a -= b
a = imul(a, b)a *= b
a = itruediv(a, b)a /= b
a = ifloordiv(a, b)a //= b
a = imod(a, b)a %= b
a = ipow(a, b)a **= b
a = irshift(a, b)a >>= b
a = ilshift(a, b)a <<= b
a = ior(a, b)a |= b
a = iand(a, b)a &= b
a = ixor(a, b)a ^= b
a = imatmul(a, b)a @= b
a = iconcat(a, b)a += b (a, b是序列)
序列操作
operator中的方法意义
concat(a, b)拼接两个序列
contains(a, b)b in a
countOf(a, b)a中b的次数
index(a)a的索引
indexOf(a, b)a中b的第一个索引
delitem(a, b)del a[b] (删除a[b])
getitem(a, b)a[b]
setitem(a, b, c)a[b] = c
length_hint(obj, default=0)len(obj) (求序列长度)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值