関数 中級

46. 関数内部での関数定義(ネスト)

関数のネスト

if文と同じように、関数の中にも別の関数を定義することができます。この内側の関数(内部関数)は、外側の関数が呼び出されたときにだけその場で作られ、外側の関数が持つ変数をそのまま参照できるという特徴があります。

💡 ヒント:この仕組みは「クロージャ」と呼ばれ、状態を内部に保持したような関数を作りたいときに応用されます。今はまず「関数の中に関数を書ける」ということだけ知っておけば十分です。

サンプルコード

def outer():
    message = 'こんにちは'

    def inner():
        print(message)

    inner()

outer()
outer関数の中でinner関数を定義しています。inner()はouter関数のローカル変数messageをそのまま参照でき、outer()を呼び出すとその中でinner()も実行されます。

📝 練習問題

練習問題:outer関数内でnum = 10を定義し、内部関数でnumを2倍して表示する処理を作ってください。