万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    先週の金曜(2008年7月25日)
    ミラクルリナックスでの[コードリーディング]Python Code Reading

    StringIO.py
    達人が書いた
    ウェブコア(株)柴田淳(しばたあつし)ex.しばたじゅんはシンガーソングライター

    コピーモジュール
    リファレンスが変数になる。
    書き換え可能オブジェクト

    ファイル風(のふりをする)のオブジェクトを実現する。ファイルを同じ操作をして同じ機能を実現する。
    PurePython
    どうすれば高速になるかのケーススタディ
    300行の短さ。

    検索ランキング9位


    ファイル処理をメモ時(文字列)でエミュレート
    ネットワーク処理などで利用される。
    Webのデータやメールを読む。
    処理が文字列面倒。
    マルチスレッド、高速性

    Pythonのオブジェクト構造
    ファーストクラスオブジェクトアトリビュートに他のオブジェクトを持つ
    データ(文字列やリストなど)
    呼び出し可能オブジェクト(メソッド)
    Attributeに名前が付いている。

    ■特殊メソッド
    オブジェクトの振る舞いを決めるmwそっど
    __XXX_()という名前を持つ
    __aaa__()

    ex)a+1 → a_add(1)
    内部的に+はaddでやってる

    listは足し算 ※意外と知られていない

    extend・・ オブジェクトの中身を変えてしまう。
    ■ファイルオブジェクト
    ・ファイルの読み書きを行う組み込みオブジェクト
    メソッドとしてインターフェースを持つ。
    read()、write()、close()、seek()など
    ・インターフェースメソッドを使ってオブジェクトを操作
    他のint、itとは違う。


    Pythonユーザ会のドキュメント化されている。
    分類ごとに説明れている。

    ■ファイル風オブジェクト
    ・ファイルオブジェクトと(ほぼ)同じインターフェースを持つ。
    StringIO
    ・ファイル処理をメモリ(文字列)でエミュレート
    ・ファイル処理が必要とされる場面で実ファイルを必要としない。
    ・ネットワーク処理などで利用される。
    今回はPurePython版、

    書き込みが遅いなどの問題がある。
    要らないデータが色々やりとりされる。

    ・c.f.cStringIO こちらの方が早い。継承が出来る。
    ある一定のサイズまではデータが保持される。
    継承して作れる。
    Pythonの銘々規則(PEP8?)を違反している。
    ファイル名は全部小文字でなければならない。
    かっこわるい。モジュールの代表例。

    △使う場面。
    URLOpenの返り値
    logなど。いちいちファイルを作ると面倒なので、テンポラリで使ったりする。

    ■使いかた

    from StringIO import StringIO

    どういうことを目指しているか?

    ■StringIO.py
    323行のソース(2.5.x)
    基底クラスを取り込んでいたりしている。
    ファイルオブジェクトをイテレータ
    古くから有るが手直ししている
    シンプルなクラス(非New Style クラス)
    →旧スタイルクラス、新スタイルクラス(違い 基底クラスとしてオブジェクトを継承しているかどうか。
    イテレータ
    書き込みの処理の高速化
    test()関数を持っている。デグレッションなど。

    しばしば早かったりする。
    C1のStrngIO・・速度の解決など
    サブクラスにすることが出来る。

    ■コードリーディング
    トリプルクォーテーション?
    特殊メソッド
    第1引数にselfが来る。
    C++などのthisみたいな。
    closeオブジェクトは空にしている、Buflistは空にしていない。
    再オープンできない。一度クローズしたらおしまい。

    ■考察(宿題)
    ・文字列の連ケチを使ってwrite()メソッドを実装するとどの程度「遅く」なるのか
    ・StringIOのように、「〜のふりをするオブジェクト」の例
    ・想定される異様方法
    WEBブラウザ?
    ・StringIOをサブクラスする。
    ・具体的な案、実装

    ■来てる人のこと
    s〜〜がめんどう
    C.StringIO
    print文が使えるのでそこに入れる。
    getValueは読み込み位置に関係なく返してくれる。
    →ptint文を中で決める。
    StandIOで