attrgetter
attrgetter 与 itemgetter 作用类似, 它创建的函数根据名称提取对象的属性。 如果把多个属性名传给 attrgetter, 它也会返回提取的值 构成的元组。 此外, 如果参数名中包含 .(点号) , attrgetter 会深入嵌套对象, 获取指定的属性。
from collections import nametuple
# 命名元组
LatLong = namedtuple('LatLong', 'lat long')
Metropolis = namedtuple('Metropolis', 'name cc pop coord')
metro_areas = [Metropolis(name, cc, pop, LatLong(lat, long)) for name, cc, pop, (lat, long) in metro_data]
from operator import attrgetter
name_lat = attrgetter('name', 'coord.lat')
for item in sorted(metro_areas, key=attrgetter('coord.lat')):
print(name_lat(item))
可以应用到实际项目中。dict比较占用内存。nametuple是个不错的选择。搭配attrgetter有很多可能
methodcaller
它的作用与 attrgetter 和 itemgetter 类似, 它会自行创建函数
from operator import methodcaller
a = 'hello world'
upcase = methodcaller('upper')
upcase(a)
有点类似getattr的感觉,但是却有点不一样