attrgetter、itemgetter、methodcaller

operator模块中的 attrgetter、itemgetter、methodcaller 三个方法其实就是python中的闭包。传入一个,多个参数,返回一个可调用的函数。通过闭包实现调用不同的对象,而不同的对象使用同样的入参参数。返回一个可调用的函数的对象参数,可以使用闭包传入的参数。

attrgetter 获得对象指定的属性值属性选择器

>>> class Student:
...     def __init__(self, no=None, name=None, score=None):
...             self.no=no
...             self.name=name
...             self.score=score
...     def add_score(self, value=0):
...             self.score += value
...
>>> student = Student("10001", "jack", 80)
>>> f=operator.attrgetter("score")
>>> f(student)
80
>>> f=operator.attrgetter("name","score")
>>> f(student)
('jack', 80)

methodcaller 调用对象指定方法方法选择器

>>> f = operator.methodcaller("add_score")
>>> student.score
80
>>> f(student)
>>> student.score
80
>>> f = operator.methodcaller("add_score", 10)
>>> f(student)
>>> student.score
90

itemgetter 获得可索引对象指定项的值元素项选择器

>>> operator.itemgetter(1)('ABCDEFG')
'B'
>>> operator.itemgetter(1,3,5)('ABCDEFG')
('B', 'D', 'F')
>>> operator.itemgetter(slice(2,None))('ABCDEFG')
'CDEFG'
>>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
>>> getcount = operator.itemgetter(1)
>>> list(map(getcount, inventory))
[3, 2, 5, 1]
>>> sorted(inventory, key=getcount)
[('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值