python3 関数を変数に代入する方法!ファーストクラスオブジェクトとしての関数の使い方も解説!

関数を変数に代入する方法を説明します。
pythonでは、関数はファーストクラスオブジェクトなので、変数に関数を代入することができます。
その他の、関数がファーストクラスオブジェクトであるから可能な処理についても説明します。例えば、 「関数を引数として渡す 」処理、「 関数をデータ構造(リスト)に格納する 」処理です。

ファーストクラスオブジェクトについては、第一級オブジェクト – Wikipediaをご確認ください。
また、下記記事により、pythonの関数がファーストクラスオブジェクトであることがわかります。

関数を変数に代入

max_obj = max
print(max_obj(3,5))
"""出力
5
"""

max関数を変数に代入しています。max関数を代入した変数をmax関数と同じように使用できていることがわかります

関数を引数として渡す

def add(a, b):
    return a+b
def sub(a, b):
    return a-b
def calc(func, a, b):
    ans = func(a, b)
    print(ans)

calc(add, 2, 3)
calc(sub, 2, 3)
calc(max, 2, 3)
"""出力
5
-1
3
"""

calc関数に3種類の関数を引数として渡しています。出力結果から、渡した関数を正常に使用できていることがわかります。

関数をデータ構造(リスト)に格納

l = [max, min]
print(l[0](2,3))
print(l[1](2,3))
"""出力
3
2
"""

リストlのインデックス0の要素にmax関数、インデックス1の要素にmin関数を入れています。
l[0]とすることで、インデックス0の要素に入れたmax関数をコールしていることがわかります。

参考

First Class functions in Python – GeeksforGeeks

python – What are “first class” objects? – Stack Overflow

コメント

タイトルとURLをコピーしました