Python

【Python】関数の引数に値を指定して新たな関数を生成する方法【functools.partial】

毎回のように同じ引数を指定する関数を使用する際、呼び出すたびにその引数をいちいち記述するのは結構めんどくさい。

なのでそんな時は、functoolsモジュールのpartial()関数を使ってあらかじめ引数を指定したpartialオブジェクトを生成すると楽です。

それでは、functools.partial()関数の使い方を見ていきましょう!

functools.partial()関数

functools.partial()関数の書式は以下のような感じ。functoolsモジュールは標準ライブラリなのでインポートするだけで使えます。

import functools

functools.partial(func, /, *args, **keywords)

定義されている引数は以下のような感じ。

func引数 関数の参照。
*args引数 func関数に位置引数として引き渡す値。
**keywords引数 func関数にキーワード引数として引き渡す値。

以下のコードは、print()関数の改行を余分にするprintl()を定義しています。

import functools

# 改行を余分にするprint()を生成
printl = functools.partial(print, end='\n\n')

# 呼び出し
printl(123)

printl('abc')

実行結果

123

abc

このように、頻繁に同じ引数を指定するような関数はfunctools.partial()で作っちゃった方が楽ですね❗️

partialオブジェクト

partial関数を実行するとpartialオブジェクトが生成されます。このオブジェクトは、以下の3つの呼び出し専用属性を持っています。

func 渡された関数の参照が格納されている。
args partialオブジェクト呼び出し時に一番左の位置引数として渡される値。
keyworgs partialオブジェクト呼び出し時にキーワード引数として渡される値。
import functools

line = functools.partial(print, '-------------', end='\n\n')
print(type(line))

print(line.func)
print(line.args)
print(line.keywords)

実行結果

<class 'functools.partial'>
tesut
None
('-------------',)
{'end': '\n\n'}

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ