Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ クロージャ | 変数スコープ、ネスト関数、クロージャ
Pythonにおける関数型プログラミングの概念

bookクロージャ

メニューを表示するにはスワイプしてください

クロージャとネストされた関数

ネストされた関数とは、他の関数の内部で定義された関数のこと。ネストされた関数は、コードの整理や補助関数のスコープを限定するために有用。ただし、すべてのネストされた関数がクロージャであるとは限らない。

クロージャは、特別な種類のネストされた関数。クロージャは、外側の関数のスコープ内の変数を「記憶」し、外側の関数の実行が終了した後でもそれらの変数にアクセスできるネストされた関数。つまり、クロージャは複数回の呼び出しにわたって状態を保持できる。

主なポイント:

  • すべてのクロージャはネストされた関数である;
  • すべてのネストされた関数がクロージャであるとは限らない;
  • ネストされた関数がクロージャになるのは、外側の関数のスコープ内の変数を使用し、その変数が外側の関数の返却後もアクセス可能な場合のみ。

この違いは、Pythonが変数スコープをどのように管理するか、またクロージャを使って状態と振る舞いを一緒にカプセル化する方法を理解するうえで重要。

12345678910
def 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())
copy

make_greeter("Alice") を呼び出すと、Pythonは greet の値が「Alice」であることを記憶した新しい name 関数を作成する。make_greeter の実行が終了しても、返された greet 関数は元のスコープの name 変数にアクセスできる。そのため、greeter() を呼び出すと Hello, Alice! が出力され、another_greeter() を呼び出すと Hello, Bob! が出力される。それぞれのクロージャは必要な変数の独自のコピーを保持している。

question mark

関数がクロージャとなる条件は何か?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 3.  8

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 3.  8
some-alt