Categories: Python

【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オブジェクトを生成して使いまわしましょう!

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

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

【Python】yield from の使い方

この記事では、yield fromの使い…

3日 ago

【Unity】BGMやSEを再生する方法

この記事では、UnityでBGMやSEな…

2週間 ago

【Unity】オブジェクトが見えているかどうかを判別する方法

この記事では、特定のオブジェクトがカメラ…

3週間 ago

【Unity】アセットストアにあるアセットを追加・使用する方法

この記事では、Unityのアセットストア…

4週間 ago

【Unity】値が変更された際に処理を実行したい

この記事では、値が変更された際に何かしら…

4週間 ago

【Unity】クラスのパラメータをインスペクターから調整したい

この記事では、定義したクラスをインスペク…

1か月 ago