Python の functools.partial による部分適用
functools.partial は関数の一部の引数を固定した新しい関数を作成します。同じ引数を何度も渡す場面で、コードの重複を減らせます。
基本的な使い方
from functools import partial
def power(base, exponent):
return base ** exponent
square = partial(power, exponent=2)
cube = partial(power, exponent=3)
print(square(5)) # 25
print(cube(5)) # 125
partial は新しい関数オブジェクトを返します。元の関数と固定された引数の情報を保持しています。
print(square.func) # <function power at ...>
print(square.keywords) # {'exponent': 2}
位置引数の固定
位置引数も固定できます。左側から順に固定されます。
def greet(greeting, name):
return f"{greeting}, {name}!"
say_hello = partial(greet, "Hello")
print(say_hello("Alice")) # Hello, Alice!
実用例:コールバック関数
イベントハンドラやコールバックで追加の引数を渡したい場合に便利です。
from functools import partial
def on_click(button_id, event):
print(f"Button {button_id} clicked: {event}")
# button_id を固定したハンドラを作成
handler_for_button_1 = partial(on_click, "btn_1")
handler_for_button_2 = partial(on_click, "btn_2")
lambda を使う方法もありますが、partial は関数オブジェクトとして扱いやすく、デバッグ時にも情報が参照しやすいという利点があります。