この記事では、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オブジェクトを生成して使いまわしましょう!
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ


