首先先介紹 operator 模組中的幾個函數:
- itemgetter
- attrgetter
- methodcaller
itemgetter 會呼叫 __getitem__,與 lambda fields: fields[$X]有類似的效果。attrgetter 可以直接用名字取得物件的 attributes。以下為一個例子:
from collections import namedtuple from operator import attrgetter, itemgetter data = [ ('San Francisco', 'US'), ('Paris', 'FR'), ] City = namedtuple('City', 'name cc') cities = [City(name, cc) for name, cc in data] # itemgetter & attrgetter items_itemgetter = itemgetter(1, 0) items_attrgetter = attrgetter('cc', 'name') for city in cities: # Same results print(items_itemgetter(city)) print(items_attrgetter(city))
methodcaller 會創造一個函數 (method),並且直接代入其引數:
from operator import methodcaller s = 'hello world!' fn = methodcaller('replace', '!', '++') print(fn(s)) # hello world++
上面的例子中 s 為一個字串,而 replace 為字串類別的函數 (method)。這個用法與 partial 很類似,差別是 partial 的第一個參數為一個函數 (function),而不是一個類別的 method。以下為一個例子:
from functools import partial from operator import mul double = partial(mul, 2) print(double(7)) # 14
沒有留言:
張貼留言