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 = 2、d = 4が計算されます。f1はf2を直接呼び出した結果ではなく、f2(c, d)を呼び出すラムダ式(無名関数)そのものを返します。- このため、
resultを表示すると「関数オブジェクト」であることが確認でき、result()と呼び出して初めてタプル(2, 4)が得られます。
実行結果
<function <lambda> at 0x0000000003041CF8>
(2, 4)
最初の出力では、result がラムダ関数オブジェクトであることが分かります。続く result() の呼び出しによって、保持されていた値を使って f2 が実行され、タプル (2, 4) が返されています。
このようにPythonでは、関数を「値」として自由に扱えるため、柔軟で再利用性の高いコードを書くことができます。
-
PythonのLambda関数入門:名前のない匿名関数の基本と使い方
PythonのLambda関数(ラムダ関数)は、1行で記述できる匿名関数です。リストのフィルタリング、文字列の大文字・小文字変換、数値の掛け算など、名前を必要としない単純な処理にLambda式を活用すると、コードを簡潔に保つことができます。 なぜ関数が必要なのか プログラムの中で同じような処理を何度も実行する場合、コードをその都度書き込むのは非効率です。処理の内容を変更したいとき、同じコードが書かれている箇所をすべて修正しなければならず、コードベースが大きくなるほど修正にかかる手間と時間は膨らみます。 そこで役立つのが関数です。Pythonには、素早く関数を宣言できる特別な種類の関数「匿名関
-
Pythonの関数で図(Figure)を返す方法【Matplotlib活用】
PythonでMatplotlibを使って、関数から図(Figureオブジェクト)を返す方法を解説します。グラフ描画処理を関数化することで、コードの再利用性が高まり、複数のグラフを効率的に扱えるようになります。実装の手順figureサイズを設定し、サブプロット間および周囲のパディングを調整します。numpyを使用してxとyのデータポイントを作成します。新しい図を作成、または既存の図をアクティブにするfigure()メソッドを使った関数plot(x, y)を定義します。plot()メソッドでxとyのデータポイントを描画し、figインスタンスを返します。plot(x, y)関数を呼び出し、戻り値の