goo blog サービス終了のお知らせ 

dullhikoのだるいブログ

殆ど日記のだるいブログ

備忘録 pythonでのプライベート変数・プライベートメソッドって

2005年09月03日 | Python
__(アンダースコア二つ)だ。

self.__x
self.__func()

こういうのはプライベートメンバ。
ただし、実際には可読性があり、__xは _クラス名__xとして外部からアクセスできる。

ということだそうだ。
何度も調べたんだが、コロっと忘れてしまうんでここに記しておく。

やっぱりPyGTKのほうがいいやと思えてきた

2005年08月31日 | Python
ちょっと弄ってみたが…
なんつーか、ドキュメントが少ないというか…
実は…
よくわかんない。コード以前にもっと基本的なところが。
たとえばどうコントロールを配置すればいいのかという時点から。
VBとかDelphiみたいに自由に置けない。
XRCedというのも魅力的ではあるんだが、こちらはさらによくわからない。

というわけで、やっぱPyGTKのほうがいいというか、GTKのGladeのほうが使いやすいかなぁ、と。

んで、いままで俺はバカみたいにGladeが吐くCのソースコードを変換していたわけだが、ふと、~.gladeファイルをテキストエディタで開いてみたら、

これは中身が単なるXMLですね?

ということは、XMLパーサを使ってコンバートするスクリプトを書けばもっとスマートかつ簡単ではないのか、という。
やってみるか。

今更になってwxWidget/wxPythonを使う

2005年08月25日 | Python
保守的というか臆病者というかなんというか、wxWidgetをなんとなく敬遠していたわけだが、思い切って使ってみた。
というのも、Audacityというフリーなwaveエディタがあって、こいつの使い勝手のよさには正直感心していたのだ。
それ以前にはTWEというやはりフリーなwaveエディタを使っていたのだが、こいつが長大なwaveデータの加工・編集には向いていないのだ。
でかいデータの真ん中辺りでちょっと削除しようもんなら作業用の一時ファイルに膨大な時間をかけて処理をしてくれてしまう。
そこでAudacityなら一時ファイルを分割して作業しているので、いかに大きなデータでもサクサクだ。

って、話がズレた。

ともかく、AudacityはwxWidgetsを使っている、ということ。
それを知ったのもwxWidgets導入の動機でもある。

そういうわけで、wxWidgetsを入れてみる決心をしたわけだ。
もちろん、wxPythonも使って、だ。ついでだから、wxGladeも入れたりして。

これが、かなり行ける。なんつってもPythonソースに直に対応してるし。
GladeでpyGTK向けにコンバータを書いてた自分はアホそのものだったなと思える。
とはいえ、本家GTKが2.8になりcairoを取り込んだということで、その辺にpyGTKが対応すれば面白いわけで、全くの無駄だったとは思ってないが。
まあ、それはともかく。

wxPythonのデモみてるだけで面白いですよ…。

Python によるゲームプログラミング実況中継が更新されていた

2005年08月23日 | Python
http://www.unixuser.org/~euske/doc/pygame/index.html

Yusuke Shinyamaさんの、FlashでPygame実況プログラミングというシビれるスタイル。正直カコイイ。
第一回から更新の間が空いていたのでどうしたものかと思っていたが知らぬ間に更新されていた。

ちなみに俺がPygameをきちんと知ったのはこのサイトが初めてだったように思う。

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

Pythonのsetup.pyをちょいとかじる。

2005年08月15日 | Python
NoboNoboさんの書かれた小技集からdebugger.pyを、いちいち同じディレクトリに置くものアレなんで、site-packageにでもコピーして入れてみようと思ったのだが、そんなふうにただ入れるだけではヒネリが無い。

そういうわけで、setup.pyでも書いて、インストーラってのを後学のためにやってみようと思い立った。

これが面白い。
ヘルプにも書かれている当たり前のことだが、と前置きしておいて、

python setup.py install

これが普通のインストール方法だ。
そこで

python setup.py bdist_wininst

こいつだと、インストールではなく、なんとwindows版のバイナリ実行版インストーラを自動生成してくれるのだ。
常識なんだろうが、知らなかったのですごくびっくりした。Pygameやらなにやらで、あのインストーラは一体どうやってつくってるんだろう…とか思っていたが…すごいねPython。
ちなみにsetup.py自体はかなり奥が深いようで…まあ今はそんなに触ることもやめておいた。

Pythonで文字列を簡単に切り出す

2005年08月15日 | Python
Pythonなら何事でもシンプルに出来るはず、という思い込みがあって。
これは大抵の場合、正しいのだが。
必ずしも俺がその正しい方法にたどり着くことができるわけではないのが辛い。

今日はトークナイズというか文字列の切り出しについて考えていた。
実は今、GTKのGladeが吐き出すCソースコードをPythonスクリプトに自動変換するPythonスクリプト(ちょっとややこしい表現だ)を書いているのだが。

gtk_hoge(hogehoge, hoge, 8, 24)

みたいなコードがあった場合、引数をリストやらタプルに分解してしまいたいと思ったわけだ。
で、頭のよろしくない俺は最初はこう考えた。

ループして正規表現で切り分けてしまえ、と。

そりゃ、可能だ。
しかしそれはやはり、誰が見てもどう考えても美しくない。こんなありふれた処理は一発で出来るはずである。

そのとおり。出来ました。

文字列オブジェクトのsplitメソッドがそれ。一瞬です。

つーわけで一つ。Pythonでの日本語について。

2005年08月14日 | Python
せっかくPythonカテゴリを作ったのでここでひとつ。
Pythonでの日本語は簡単で、まあ、ソースファイルのエンコードをキッチリ指示して、u指定をつけたりしとけばまあ問題は無い。
って、これはあくまで表示や文字列としての話。

ファイルの保存となると話が違ってくる。
デフォルトではasciiコーデックが強制指定されており
マルチバイト文字列を通そうとしても拒否されてしまう。

システムデフォルトのエンコーディングをいじる、ということも出来るそうだが
その手段はあまり美しくない。と個人的な好みではそう思う。いやコードはきれいになるけど汎用性がないじゃん、と。
そこでヘルプ見たりググッてさまざまなサイトを見させていただいた結果、こういう感じの結論に達した。

fp=open("hoge.txt","w")
fp.write(u"テスト".encode('UTF-8'))
fp.close()

とすれば、UTF-8で書かれたテキストが出来上がる。

unicode("テスト").encode('UTF-8')
でもいいのかもしれない。

この内容はNoboNoboさんの書かれたPython小技集を必死でググッて発見、参考にさせていただきました。他にも環境変数参照の小技とか、なかなか最高。
というわけで初トラックバックさせていただこうと思ったが、その方法がいまいちわからなかったので断念。