kahoの日記: 変数スコープ
日記 by
kaho
Pythonを使っていて気になるのは,ブロックの中で定義した変数がブロックを出た後でも見えてしまうことだ.
例えば
for i in range( 10 ):
a = i + 1
print a
とすると,私としてはaは未定義だとエラーを出して欲しいところなのだが,10になってしまう.
変数定義がいらないのは便利なことなのだが,あるスコープの中でだけ有効な変数を使いたいときに困ってしまう.関数のスコープ内では保護されているのだが,制御文のブロックの中でも保護されて欲しいところだ.
特にPythonで怖いのはモジュールの名前と衝突してしまったりするときがあり,importとの組み合わせでハチャメチャなことになりかねない.できれば名前空間を細かく分割して欲しい.例えばPerlにおけるmyのようなキーワードがないものだろうか.
もし他のスクリプト言語でブロック単位での名前空間の分割をやってくれるなら移行してもいいと思ったのだが,RubyもGroovyもやってくれないようだったので気をつけてスクリプトを書くしかないかというところ.
変数スコープ More ログイン