Python PR

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

記事内に商品プロモーションを含む場合があります

この記事では、Pythonで関数の引数に値を指定して新たな関数を生成する方法を解説します。

同じ引数を指定して関数を何度も呼び出す場合、毎回引数を記述するのはめんどくさい。

そんな時は、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'>
<built-in function print>
('-------------',)
{'end': '\n\n'}

同じ引数を指定する関数は、partialオブジェクトを生成して使いまわしましょう!

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