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に似てるな。

やはり備忘録:vimで新規ファイルにsyntaxを適用する

2005年08月19日 | ソフトウェア
当たり前だが、新規ファイル(つかバッファ)を作ったとき、いきなりはsyntax coloringが適用されない。
そりゃ作成直後は無名、ファイル形式を探る方法さえないのだから当然である。

そこで、俺はいままで無精者の本領を発揮してメニューからマウスでわざわざ選択していた。てか、これってやっぱり余計に面倒じゃん、ということで。
ググりました。

set ft=python

こんな感じ。

ところで、vimのファイルエクスプローラにディレクトリ生成が無いのがちょっと悲しい… 俺がその方法を知らないだけの予感はしまくっているが