第三章:算法-operator:内置操作符的函数接口-属性和元素“获取方法”

本文探讨了Python中operator模块的属性和元素获取方法,包括attrgetter和itemgetter的使用,展示了如何通过这些方法高效地获取对象属性和序列内容,特别是在处理迭代器或生成器时的优势。

3.3.6 属性和元素“获取方法”
operator模块最特别的特性之一是获取方法(getter)的概念。获取方法是运行时构造的一些callable对象,用来获取对象的属性或序列的内容。获取方法在处理迭代器或生成器序列时特别有用,因为获取方法引入的开销会大大低于lambda或python函数的开销。

from operator import *

class MyObj:
    """example class for attrgetter"""
    def __init__(self,arg):
        super().__init__()
        self.arg = arg

    def __repr__(self):
        return 'MyObj({})'.format(self.arg)

l = [MyObj(i) for i in range(5)]
print('objects   :',l)

# Extract the 'arg' value from each object.
g = attrgetter('arg')
vals = [g(i) for i in l]
print('arg values:',vals)

# Sort using arg.
l.reverse()
print('reversed  :',l)
print('sorted    :',sorted(l,key=g))

属性获取方法类似于lambda x,n=‘attrname’: getattr(x,n):
运行结果:
在这里插入图片描述

元素获取方法类似于lambda x,y = 5: x[y]:

from operator import *

l = [dict(val=-1 * i) for i in range(4)]
print('Dictionaries:')
print('  original:',l)
g = itemgetter('val')
vals = [g(i) for i in l]
print('    Values:',vals)
print('    Sorted:',sorted(l,key=g))

print
l = [(i,i * -2) for i in range(4)]
print('\nTuples:')
print(' original:',l)
g = itemgetter(1)
vals = [g(i) for i in l]
print('   valies:',vals)
print('   sorted:',sorted(l,key=g))

除了序列,元素获取方法还适用于映射。
运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值