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
クラスに不要な属性を入れられるのを防ぐ
__slots__でクラスの属性を制限。不要なデータを入れられずに済む。
__slots__ = ['_data']
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をつかって実現。謎コード。
バックアップ確認のログメール
バックアップ失敗した時に、改めてメールを管理者に送信する機能。