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)]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章