Python Functools モジュール
functools モジュールには、partial、reduce、lru_cache などの高階関数向けのツールがあります。
import functools
高階関数は、ほかの関数と一緒に使う関数です。初心者が functools をよく使う場面は、いくつかの引数を固定して関数を再利用する場合や、コストの高い結果をキャッシュする場合です。
partial()
partial は、いくつかの引数をあらかじめ埋めた新しい callable を作成します。
from functools import partial
def power(base, exponent):
return base ** exponent
square = partial(power, exponent=2)
print(square(5))
25
別の関数がより少ない引数の callable を期待しているときに便利です。
from functools import partial
def greet(greeting, name):
return f'{greeting}, {name}!'
say_hello = partial(greet, 'Hello')
print(say_hello('Ada'))
Hello, Ada!
reduce()
reduce はイテラブルを 1 つの値にまとめます。
from functools import reduce
total = reduce(lambda acc, item: acc + item, [1, 2, 3, 4])
print(total)
10
単純な合計なら、組み込みの sum() を使う方がよいです。reduce は、結合処理が独自のときにより役立ちます。
from functools import reduce
words = ['Python', 'Cheatsheet']
title = reduce(lambda left, right: f'{left} {right}', words)
print(title)
Python Cheatsheet
lru_cache()
lru_cache は関数の結果をメモ化します。
from functools import lru_cache
@lru_cache(maxsize=None)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
print(fibonacci(10))
55
キャッシュの使用状況を確認できます。
print(fibonacci.cache_info().hits > 0)
True