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】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

7か月 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

7か月 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

7か月 ago

【Unity】割合から数値に数値から割合に変換する

この記事では、割合から数値に変換する関数…

7か月 ago

【Python】抽象クラスを定義する方法

この記事では、Pythonで抽象クラスを…

7か月 ago