pickleを使う

pickleモジュールを使うと、Pythonのデータ構造(タプルとかリストとかクラスのインスタンスとか)を保存できます。
pickle化がPythonのオブジェクトをバイト列に変換すること、非pickle化はその逆を指します。

Pickle化

dumpを使います。

dump(オブジェクト, ファイルオブジェクト)

第二引数はopen(ファイル名)といった感じで開いたファイルオブジェクトを渡してください。

なお、dumpsを使うと、ファイルに書き込まずに文字列が返されます。

非Pickle化

loadを使います。

load(ファイルオブジェクト)

こちらも、開かれたファイルオブジェクトを渡すようにします。
なお、dumpsで作った文字列を読み込むにはloadsを使います。

クラスのインスタンスを保存して、読みだしています。
ここではクラスインスタンスをpickle化してますが、他のデータでもできます。

>>> import pickle
>>>
>>> # 適当にクラスを作る
>>> class hoge:
...     def __init__(self, data):
...             self.data = data
...
>>> h = hoge(10)
>>> h.data
10
>>>
>>> # Pickle化
>>> f = open('test.txt', 'w')
>>> pickle.dump(h, f)
>>> f.close()
>>>
>>> # 非Pickle化
>>> f = open('test.txt')
>>> h2 = pickle.load(f)
>>> h2
<__main__.hoge instance at 0x0174DCD8>
>>> h2.data
10
>>> f.close()

安全性について

調べていたら、Pickleの安全性について言及しているサイトを見つけた。

http://nadiana.com/python-pickle-insecure

pickleモジュールはセキュリティについて何も考慮していないので、非pickle化するデータには細心の注意を払いましょうとのことです。
上記サイトに記されている例ですが、
>||python|
import pickle
pickle.loads("cos\nsystem\n(S'dir'\ntR.") # This will run: dir
|

でdirが実行されてしまいます。
このように、非pickle化はコマンドを実行してしまう可能性があります。
上記サイトでは、その対策が記されていますが、代替としてJSONを使うことなども勧められていました。

matplotlibをWindowsにインストール

matplotlibにはnumpy(数値計算ライブラリ)が必要。
ということで、この二つのライブラリをインストールしましょう。

numpy

以下のサイトから

使用しているPythonのバージョンに合わせたファイルをダウンロードしてください。
例えば、Python2.5を使っているなら

numpy-1.5.0b1-win32-superpack-python2.5.exe

です。ダウンロードしたファイルを実行してインストールしてください。

matplotlib

ここから

Donload NowってボタンだとVer. 0.93あたりをインストールさせられますけど、多分1.0をインストールして構わないと想います。
こいつもダウンロードしたファイルを実行してインストールです。

ホンイツ放銃率高い

麻雀の話題もしていこうかと。
新ID作ってるんだけど、鳳凰目指したいし。


といってまだ初段なんですけど。


昔からホンイツへの警戒が弱くて駄目です。
確か数年前に、牌譜を解析した時も平均より高かった気がします。


今回の放銃はこれ。


ここでマンズ切って放銃してます。
マンズを切ればマンガンになるわけで、難しいですね。


ただ、下家がマンズホンイツテンパイしてるので、放銃の確率は結構高い。
見た感じ、単騎の可能性は低そうです。
チンイツと考えた方が無難そう。
マンズの下を鳴いているので、当たるのは4〜9mくらいか。
そう考えると、マンズ切るのは失点期待値が高すぎる気もする。


つーか、36m待ちとかいうテンパイにしてるのが駄目そう。
3mポンされているのに気づかず、思わず9sのポンテンをいれたのがこの局の分かれ目かねぇ。

schemeの環境を導入しよう

schemeとは、プログラミング言語です。
世界で2番目に古いプログラミング言語であるLispは有名ですが(1番古いのはFortran)、schemeはその方言の一つです。
非常にコンパクトな仕様で、一分のマニアたちから絶大な人気を誇っています。


特徴として、前置記法です。
例えば、一般的な足し算である1+1がschemeでは

(+ 1 1)

で表されます。


また、関数をファーストクラスオブジェクトとして扱えるので広い意味では関数型言語です。
(でも変数の破壊操作を許しているので純粋な関数型言語ではないです。)


ちょっと試してみたいことがあって、schemeを導入してみます。
schemeのための有名な開発環境としてDrSchemeなるものがあるらしくそれをインストールしてみることに。。。


と思ってDrSchemeのWebサイトを開いたら、何やらポップアップが。
どうやらDrScheme改め、Racketという名前に変更になったらしい。
正確には、schemeの開発環境というのをやめてRacketというプログラミング言語とそのツールという位置づけになったようです。
久々に英語読んだからよーわからん。
とりあえずインストールしておくことに。


それっぽくインストールできました。

C++の勉強1

最近はオライリーC++実践プログラミングって本でC++を勉強中。

C++実践プログラミング

C++実践プログラミング

15章はシンプルなポインタについて。C言語と一緒かな。

続きを読む