← クエスト一覧

クエスト78:クロージャを使おう

スライド 1 / 6
コーデ
💻 コード例
実行結果
← クエスト一覧
🐍 Python / Quest 78 / 85

クエスト78:クロージャを使おう

発展 +10 XP
🏠
今回の課題
5を足す関数 add5 をクロージャで作って、add5(3) の結果 8 を表示しよう。
📖 解説を見る
🧠 クロージャって何?

関数の中で関数を作って返すと、内側の関数は「外側の変数」を覚えたまま持ち出せます。これをクロージャといいます。

✏️ 書き方:
def make_tagger(tag):
    def inner(text):
        return f'[{tag}] {text}'  # 外側の tag を覚えている
    return inner

warn = make_tagger('警告')
print(warn('電池が少ない'))
 → [警告] 電池が少ない
最後の return inner() が付いていないことに注目。ここでは「関数を呼ぶ」のではなく「関数そのものを渡している」のです。

📋 作るもの:
・関数名は make_adder、引数 n を1つ受け取る
・その中で「x を受け取って nx を足した結果を返す関数」を定義する
・定義した内側の関数そのものreturn で返す
・こうすると add5 = make_adder(5) で「5を足す関数」ができ、add5(3) が 8 になる

💡 どこで使う?

「設定を覚えた関数」を量産したいときに使います。add5add10 のように振る舞いのちがう関数を作る、ボタンごとに違う動きのコールバックを用意する、といった場面で活躍します。次のクエストのデコレータも、この仕組みの上に成り立っています。

⚠️ ポイント:
・内側の関数は、外側の引数や変数を覚えている
・外側は「関数そのもの」を return で返す(() は付けない)
ヒントを見る
関数の中でもう1つ def を書けるよ。最後に、その内側の関数の名前を return しよう。呼び出すわけではないので () は付けないこと。
期待する出力
8
📄 見本
「答えを見る」を押すと、お手本のコードが出ます。クリックでコピーできます。
💻 コードエディタ
実行すると結果がここに表示されます
正解!見本と同じになりました。
次へ →
🏠 ホームへ

れんしゅうもんだい

☑ 0 / 3 正解 レッスンに戻る

全問正解でクエストクリア!

未挑戦

問題 1: make_multiplier(3) でかけ算するクロージャを作って mul3(4) を表示しよう!

実行結果
実行できたよ!
もう一度チャレンジ!
📄 見本の出力
12
未挑戦

問題 2: make_greeter('こんにちは') で挨拶する関数を作り、greet('たろう') で「こんにちは、たろう!」と表示しよう!

実行結果
実行できたよ!
もう一度チャレンジ!
📄 見本の出力
こんにちは、たろう!
未挑戦

問題 3: make_power(2) で2乗する関数を作り、square(5) で 25 を表示しよう!

実行結果
実行できたよ!
もう一度チャレンジ!
📄 見本の出力
25
コピーしました!