Python Code Reading 06

2008年12月15日(月) 19:00 〜
Sun Microsystems用賀セミナールーム
Python Code Reading 06 行って参りました。


今回の内容は、今年最後のPython Code Readingということでこれまでの復習+有志LTです。

setsモジュール by 道須利一さん

set、frozenset

今は、set、frozensetというクラスがあるので、選べるならそちらを使用した方が良い。

バージョンが古くてメソッドが定義されていないような場合に、仮の実装を入れて古いバージョンでも動くようにするテクニック。
# インポートエラー時に同じ名前で定義してしまう
# set.pyよりコード抜粋
try:
    from itertools import ifilter, ifilterfalse
except ImportError:
    # Code to make the module run under Py2.2
    def ifilter(predicate, iterable):
        if predicate is None:
            def predicate(x):
                return x
        for x in iterable:
            if predicate(x):
                yield x
    def ifilterfalse(predicate, iterable):
        if predicate is None:
            def predicate(x):
                return x
        for x in iterable:
            if not predicate(x):
                yield x
__all__でアスタリスク使用時に、読み込まれる属性を制御
__all__ = ['BaseSet', 'Set', 'ImmutableSet']
from sets import *
クラスに不要な属性を入れられるのを防ぐ

__slots__でクラスの属性を制限。不要なデータを入れられずに済む。

__slots__ = ['_data']
プロトコル、特殊メソッド

__eq__とか。


初回は遅刻していた分だけ、聞けていなかった話がかなりありました。

StringIO.py by 柴田淳さん

特殊メソッドの話。StringIOの話。

cStringIO.py

StringIO.pyとcStringIO.pyがあるが、通常は高速なcStringIO.pyを使用する。

いくつかのクラススタイルがある
  • New Style Class
  • Old Style Class

New Style Classではプロパティなどの機能が使える。

初期化時にクリアするのがPythonの作法
文字が空ならreturn
if not s: return

inspect by 田村 公一さん

難しい。が、面白い。この話は、当時、万全の体制で聞きたかった所。
inspect.pyで、Pythonのオブジェクトの情報を収集する。

inspectでPython code objectの情報を取得。
import inspect
import mymodule

print inspect.getsource(mymodule.greeting)
print inspect.getcomments(mymodule.greeting)
print inspect.getabsfile(mymodule.greeting)


難しい。

StringIO.pyの使い方 by 田沼さん

sys.stdoutにSringIOをセットしてしまう。
すると、標準出力使用している場合に比べて、出力先変更時にあまりソースを変更しなくても済む。
というテクニックの紹介。

import sys
from cStringIO import StringIO

def run():
    # sys.stdoutにSringIOをセットしてしまう。
    result = SringIO()
    sys.stdout = result

    ....


素直に面白いと感じました。

Pythonで作ったモノ by 藤原さん

藤原さんがこれまで作ったアプリケーションの紹介。

プリンタの出力枚数カウンタ

プリンタで印刷した紙の枚数をカウントする。pysnmpをつかって実現。謎コード。

バックアップ確認のログメール

バックアップ失敗した時に、改めてメールを管理者に送信する機能。

傷害管理

メールが送られてきたら、バグ管理ツールのmantisに案件を登録する。
mantisがSOAP通信に対応していたので、WSDLモジュールを使用して実装。



感想

Python Code Readingの最初の方の回は、遅刻デフォルト状態だったので、
今回の内容は、私にとってはかなり助かる内容です。
あと、別に行われた2名のLTが、短かったけど、とても面白かった。
今回のPython Code Readingも出られて良かったようです。



今回は紙ノート持参の方を多く見かけました。
そうか、紙ノート流行ってるんだ。