グローバル変数はパラメーター受け渡しの精神に準拠していないため、定数を定義しない限り、ほとんど使用しません。今日、同僚がグローバル変数について質問し、それを行う方法があることを発見しました。
プログラムは大体こんな感じです:
CONSTANT = 0 def modifyConstant() : print CONSTANT CONSTANT += 1 return if __name__ == '__main__' : modifyConstant() print CONSTANT
実行結果は以下の通りです:
UnboundLocalError: local variable 'CONSTANT' Referenced before assign
関数modifyConstant内でグローバル変数がローカル変数になっているようです。グローバル変数が有効になっていないようです?
いくつかの修正を加えました:
CONSTANT = 0 def modifyConstant() : print CONSTANT #CONSTANT += 1 return if __name__ == '__main__' : modifyConstant() print CONSTANT
は関数内でグローバル変数にアクセスできるようです。
問題は、変数 CONSTANT が関数内で変更されているため、Python は CONSTANT をローカル変数と見なし、print CONSTANT が CONSTANT += 1 より前にあるため、当然このエラーが発生することです。
それでは、関数内のグローバル変数にアクセスして変更するにはどうすればよいでしょうか?変数を変更するには、キーワード global を使用する必要があります (PHP と少し似ています):
CONSTANT = 0 def modifyConstant() : global CONSTANT print CONSTANT CONSTANT += 1 return if __name__ == '__main__' : modifyConstant() print CONSTANT