外側のコードブロックの変数が見れなくなる理由がやっとわかった

と言われてしまった。

どうも、このままだと外側のコードブロックにある変数を見てくれないらしい。

だから、どうやってやるんだろうといろいろと調べていたら、どうも、下記コードのように配列とすると、外側のコードブロックにある変数にアクセスできるっぽい。

Pythonでのクロージャについて(追記あり) – NAL-6295の舌先三寸

で悩んでいた問題は

ある名前がブロック内で束縛されている場合、名前はそのブロックに おけるローカル変数 (local variable) です。 ある名前がモジュールレベルで束縛されている場合、名前は グローバル変数 (global variable) です。 (モジュールコードブロックの変数は、ローカル変数でもあるし、 グローバル変数でもあります。) ある変数がコードブロック内で使われているが、そのブロックでは定義 されていない場合、変数は 自由変数 (free variable)です。

4.1 名前づけと束縛 (naming and binding)

という事で、同じ名前の変数を使うと、そのブロックで新しく作られ、そのブロック全体で有効になるんですね。

Share