Python

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

頻繁に同じ引数を指定する関数を呼び出す際、幾度も同じ引数を指定するのは結構めんどくさいです。なのでそんな時は、functoolsモジュールのpartial()関数を使ってあらかじめ引数を指定した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'}

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

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』