クロージャ
メニューを表示するにはスワイプしてください
クロージャとネストされた関数
ネストされた関数とは、他の関数の内部で定義された関数のこと。ネストされた関数は、コードの整理や補助関数のスコープを限定するために有用。ただし、すべてのネストされた関数がクロージャであるとは限らない。
クロージャは、特別な種類のネストされた関数。クロージャは、外側の関数のスコープ内の変数を「記憶」し、外側の関数の実行が終了した後でもそれらの変数にアクセスできるネストされた関数。つまり、クロージャは複数回の呼び出しにわたって状態を保持できる。
主なポイント:
- すべてのクロージャはネストされた関数である;
- すべてのネストされた関数がクロージャであるとは限らない;
- ネストされた関数がクロージャになるのは、外側の関数のスコープ内の変数を使用し、その変数が外側の関数の返却後もアクセス可能な場合のみ。
この違いは、Pythonが変数スコープをどのように管理するか、またクロージャを使って状態と振る舞いを一緒にカプセル化する方法を理解するうえで重要。
12345678910def make_greeter(name): def greet(): return f"Hello, {name}!" return greet greeter = make_greeter("Alice") print(greeter()) another_greeter = make_greeter("Bob") print(another_greeter())
make_greeter("Alice") を呼び出すと、Pythonは greet の値が「Alice」であることを記憶した新しい name 関数を作成する。make_greeter の実行が終了しても、返された greet 関数は元のスコープの name 変数にアクセスできる。そのため、greeter() を呼び出すと Hello, Alice! が出力され、another_greeter() を呼び出すと Hello, Bob! が出力される。それぞれのクロージャは必要な変数の独自のコピーを保持している。
すべて明確でしたか?
フィードバックありがとうございます!
セクション 3. 章 8
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 3. 章 8