dullhikoのだるいブログ

殆ど日記のだるいブログ

Pythonのグローバル変数

2005年08月19日 | Python
いよいよPythonに親しむに従い、さらに知らなかったことを知る。楽しからずや。

今回はグローバル変数。正直、「変数は極力ローカル」という教えに従いそう生きてきた俺だったが、遂にやむにやまれずグローバル変数に手を出すことにした。というかむしろトリッキーなコードになるぐらいなら素直に積極的にグローバル変数に手を出した方がマシと思うのだが、まあいいか。(そういうときは設計の間違いのようにも思える)

が、それはともかく、Cのように適当にやればグローバルになるわけではなかった。
クラスのコンストラクタ内で使おうとしたら、そんなローカル変数は定義されていないとか言いやがる…
スコープ内でglobalと宣言していなければ、グローバル変数としては扱われない…?

確かに、そうしてみたら、問題のコードではグローバル変数として認識され、動いた。

が、Pythonコンソール(PythonWin)や、極小にしてみたコードをpythonから実行してみるのでは、普通に外部の何もないところで宣言したグローバル変数がグローバル変数として使えているようで、何がなんだかよくわからない…

と、弄ってるうちに理由が判明したので、ここに書いておこう。

global_val = 0

class hoge:
  def __init__(self):
    self.myval = global_val

これは普通に使用できるし、グローバル変数の中身を参照も出来ている。

global_val = 0

class hoge:
  def __init__(self):
    self.myval = global_val
    global_val+=1

こっちはエラー。

global_val = 0

class hoge:
  def __init__(self):
    global global_val
    self.myval = global_val
    global_val+=1

これなら動く。

要するに。グローバル変数を書き換えるには、global宣言が必要!ってことだと思う。tclに似てるな。

最新の画像もっと見る