[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