Pythonのスコープ

PythonのスコープはLEGBルールである。L:Local、E:Enclosing function's scope(関数のネスト)、G:Global、B:Builtinの順に見える変数が優先される。
つまり、ビルトイン関数をローカルなどの変数で上書きできる。例えば以下のように。


def foo:
open = 'test' # ビルトイン関数のopenに文字列を代入

Pythonの変数は全て名前空間に属するのだが、ある意味一貫性があって分かりやすい。
Luaも同様の考え方だったと思うが、PerlRubyを全く思い出せない。
意識してなかったと言うか、理解してなかったと言うか、自分の勉強不足は否めない。