Pythonでプログラムを書いていると、よく関数の中で関数を作ることがあります。 Python はクロージャに対応していて、関数の中で作られた関数は、外側の関数のローカル変数を参照することができます。 クロージャが一番役に立つ場面がデコレータです。次の例では、引数を取るデコレータを作るために関数内関数を2段階作成し、それぞれのローカル変数を一番内側から参照しています(このプログラムは、Python 2.6とPython 3.0の両方で動きます)。 リスト1 # coding: utf-8 from __future__ import print_function import sys def log(out=sys.stderr): def decorator(func): name = func.__name__ def decorated(*args, **kwargs): ###
![第1回 nonlocalでクロージャが便利に | gihyo.jp](https://cdn-ak-scissors.b.st-hatena.com/image/square/254611a011e8594fb2498de3d8e77d8dbb651def/height=288;version=1;width=512/https%3A%2F%2Fgihyo.jp%2Fassets%2Fimages%2FICON%2F2008%2F315_pythonhacks.png)