関数の中でグローバル変数に代入する

 実は関数の中でグローバル変数に代入できない

 驚愕の事実です。ふと触っていてこのことに気づきました。例えば・・・

#coding: shift-jis

a = "ABC"

def function():
  print a

function()

raw_input()

出力画面:
 ABC
これはいい。でも次はどうだろうか。

#coding: shift-jis

a = "ABC"

def function():
  a = "DEF"
  print a

function()
print a

raw_input()

出力画面:
 DEF
 ABC
上のようにfunction内で変数aは、代入した時点でローカル関数になる。つまり関数内での記述によって、グローバル変数の値が変わってしまうという事故はなくなるけれども、関数内でグローバル変数に代入したい場合どうしたらいいの?という話になる。

 global宣言

 それを解決するのがglobal宣言とかglobalステートメントと言われるもの。使い方は関数内で宣言して、これはグローバル変数だよとIron Pythonに教えてやる。

coding: shift-jis

a = "ABC"

def function():
  global a ←変数aはグローバル関数であることを教えてあげる。
  a = "DEF"
  print a

function()
print a

raw_input()

出力画面:
 DEF
 DEF
これで解決!!