【Python】ネスト関数とクロージャをシンプルに理解しよう

はじめに

Pythonを学んでいると「関数の中に関数が書いてある」コードや「値を保持できる関数」が出てきます。これは ネスト関数クロージャ と呼ばれる仕組みです。うまく使うとコードがスッキリし、再利用性も高まります。初心者でも理解しやすいように要点をまとめます。


ネスト関数とは?

関数の中で関数を定義すること。外側の変数にアクセスできるのが特徴です。

def outer(msg):
def inner():
print(msg) # outerのmsgを参照できる
return inner
hello = outer(“こんにちは”)
hello() # => こんにちは


クロージャとは?

ネスト関数の「外側の変数」を保持できる関数のこと。状態を持つ関数が作れます。

カウンタの例

def make_counter():
count = 0
def inc():
nonlocal count
count += 1
return count
return inc
c = make_counter()
print(c()) # 1
print(c()) # 2


実務での応用例

  1. キャッシュ処理:同じ計算結果を保存して高速化

  2. 設定の固定:APIリクエストでベースURLや認証情報をまとめて使い回す

  3. 小さな状態保持:カウンタやフラグをグローバル変数なしで管理


注意点

  • nonlocal を使うと外側の変数を書き換えられるが、多用すると読みにくい

  • キャッシュは無限に溜めない工夫が必要

  • 状態が複雑になったらクラスにした方がわかりやすい


まとめ

  • ネスト関数:関数の中に関数を定義できる

  • クロージャ:外側の値を保持する“状態付き関数”

  • 応用:キャッシュ・設定固定・API再利用など
    仕組み自体はシンプルですが、実務ではAPI通信やデータ処理の効率化に役立ちます。まずは小さな例から使って慣れていきましょう。

コメント

タイトルとURLをコピーしました