Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで関数から別の関数を返す方法をわかりやすく解説

Pythonは第一級関数(first-class functions)をサポートしているプログラミング言語です。実際、Pythonにおけるすべての関数は第一級オブジェクトとして扱われます。

これは何を意味するのでしょうか。具体的には、以下のようなことが可能になります。

  • 関数の中から別の関数を返す(returnする)
  • 関数をリストや辞書などのコレクションに格納する
  • 関数を、通常の変数やオブジェクトと同じように扱う

さらに、関数の中で別の関数を定義し、それを返すことさえできます。これはクロージャ(closure)と呼ばれる強力なテクニックの基礎にもなる概念です。

サンプルコード:関数内で関数を定義して返す

ここでは、関数の中に関数を定義し、それを返す例を見てみましょう。

def f2(c, d):
    return c, d

def f1(a, b):
    c = a + 1
    d = b + 2
    return lambda: f2(c, d)

result = f1(1, 2)
print(result)
print(result())

コードのポイント

  • f1(1, 2) を呼び出すと、内部で c = 2d = 4 が計算されます。
  • f1f2 を直接呼び出した結果ではなく、f2(c, d) を呼び出すラムダ式(無名関数)そのものを返します
  • このため、result を表示すると「関数オブジェクト」であることが確認でき、result() と呼び出して初めてタプル (2, 4) が得られます。

実行結果

<function <lambda> at 0x0000000003041CF8>
(2, 4)

最初の出力では、result がラムダ関数オブジェクトであることが分かります。続く result() の呼び出しによって、保持されていた値を使って f2 が実行され、タプル (2, 4) が返されています。

このようにPythonでは、関数を「値」として自由に扱えるため、柔軟で再利用性の高いコードを書くことができます。

  1. PythonのLambda関数入門:名前のない匿名関数の基本と使い方

    PythonのLambda関数(ラムダ関数)は、1行で記述できる匿名関数です。リストのフィルタリング、文字列の大文字・小文字変換、数値の掛け算など、名前を必要としない単純な処理にLambda式を活用すると、コードを簡潔に保つことができます。 なぜ関数が必要なのか プログラムの中で同じような処理を何度も実行する場合、コードをその都度書き込むのは非効率です。処理の内容を変更したいとき、同じコードが書かれている箇所をすべて修正しなければならず、コードベースが大きくなるほど修正にかかる手間と時間は膨らみます。 そこで役立つのが関数です。Pythonには、素早く関数を宣言できる特別な種類の関数「匿名関

  2. Pythonの関数で図(Figure)を返す方法【Matplotlib活用】

    PythonでMatplotlibを使って、関数から図(Figureオブジェクト)を返す方法を解説します。グラフ描画処理を関数化することで、コードの再利用性が高まり、複数のグラフを効率的に扱えるようになります。実装の手順figureサイズを設定し、サブプロット間および周囲のパディングを調整します。numpyを使用してxとyのデータポイントを作成します。新しい図を作成、または既存の図をアクティブにするfigure()メソッドを使った関数plot(x, y)を定義します。plot()メソッドでxとyのデータポイントを描画し、figインスタンスを返します。plot(x, y)関数を呼び出し、戻り値の