[Python] 変数

変数には2種類あります。モジュール全体で有効なグローバル変数と、関数の内部でのみ有効なローカル変数です。

グローバル変数

モジュールのトップレベルで代入された変数は、グローバル変数になり、モジュール全体で有効になります。特になにもしなくても、関数の中から参照することができます。

>>> foo = "bar"
>>>
>>> def baz():
...     print foo
...
>>> baz()
bar

関数の中でグローバル変数に代入する場合は、global文で変数がグローバル変数であることを宣言します。global文には、グローバル変数の名前を、コンマで区切って指定します。

>>> foo = "foo"
>>> bar = "bar"
>>>
>>> def baz():
...     global foo, bar
...     foo = "hoge"
...     bar = "fuga"
...
>>> baz()
>>> foo
'hoge'
>>> bar
'fuga'

global文で宣言せずに、グローバル変数と同名の変数に関数内で代入した場合、その変数はローカル変数となり、グローバル変数には影響を与えません。

>>> foo = "foo"
>>>
>>> def bar():
...     foo = "baz"
...
>>> bar()
>>> foo
'foo'

組み込み関数のglobalsを使用すると、グローバル変数の一覧を取得できます。

>>> foo = "bar"
>>> print globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', 'foo': 'bar', '__doc__': None}

ローカル変数

関数内で変数に代入すると、その変数は、その関数内でのみ有効なローカル変数になります。また、関数の仮引数もローカル変数です。組み込み関数のlocalsを使用すると、ローカル変数の一覧を取得できます。

>>> def foo(bar):
...     baz = "hoge"
...     print locals()
...
>>> foo("fuga")
{'bar': 'fuga', 'baz': 'hoge'}

del文

del文で、変数を削除することができます。

>>> foo = "bar"
>>> del foo
>>> foo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined