首先先介紹 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
沒有留言:
張貼留言