用語
Pythonはクロージャ内の変数に一般的な名前が付いていないので、以下の挙動を説明する時に困る。
>>> L = [lambda: x for x in range(3)] >>> L[0](), L[1](), L[2]() (2, 2, 2) >>> L = [lambda x=x: x for x in range(3)] >>> L[0](), L[1](), L[2]() (0, 1, 2)
前者のlambdaはクロージャで、後者は関数である。なので、挙動に違いが出る。この時、前者のxをクロージャ内の変数xと表現するしかないが、一般的な名前が付いていれば説明しやすいし、挙動も意識出来るので把握しやすいと思う。
初めてのPython本では、変数のスコープルールに、LEGBルールというのがある。この場合のEが、これに当たる。Enclosedだと思うので、直訳すると閉変数とか内包変数だろうか?あと、素直にクロージャ変数というのはどうだろう?(クロージャオブジェクトと区別が付きにくいか…。)ノンローカル変数というのもありかもしれないが、nonlocalを付けた場合と付けない場合の区別がしにくい。あと悪い例だが意味的に環境変数とか。とりあえず自分としては内包変数とでも呼んでおこうかな。
追記(2011/2/10):
グローバル変数もglobalと付ける場合と付けない場合があるが、その名前が付いているので、nonlocalを付ける場合と付けない場合があっても、名前としては、ノンローカルの方が内包変数より良いかも。とりあえず、ノンローカル変数とでも呼んでおくことにしよう。