2008年9月17日水曜日

Python のグローバル変数

4.1 名前づけと束縛 (naming and binding) によると、

ある名前がブロック内で束縛されている場合、名前はそのブロックにおけるローカル変数 (local variable) です。ある名前がモジュールレベルで束縛されている場合、名前はグローバル変数 (global variable) です。

6.13 global 文 によると、

global 文は、列挙した識別子をグローバル変数として解釈するよう指定することを意味します。 global を使わずにグローバル変数に代入を行うことは不可能です (…)

global 文で列挙する名前は、同じコードブロック中で、プログラムテキスト上 global 文より前に使ってはなりません。

試してみる。

hoge = 10

def test():
    # ローカル変数
    hoge = 1000

test()
print hoge   #=> 10


def test2():
    # グローバル変数
    global hoge
    hoge = 1000
    
test2()
print hoge   #=> 1000

PHP と同様か。

Ruby では、変数の前に $ を付けるとグローバル変数になる。(cf. 変数と定数 - Rubyリファレンスマニュアル)