《22》要素数:メソッド __len__〈Python 2.x 版〉
実録:はじめてのプログラミング《Python2.x》
《22》要素数:メソッド __len__
《著》小粒ちゃん+α《監修》小泉ひよ子とタマゴ倶楽部
2009年2月12日(木)
今日の進捗
Comment | |
---|---|
本人:野中 | リストに要素を挿入するのはわりと簡単なのですが削除するのはとても面倒で気が抜けません。 |
担当:伊藤/本間 | 。(^^) |
要素数:メソッド __len__
組み込み型 list と同様に、連結リストの要素数が得られると便利です。すると、
def ex(): s = myList() print s,"\t#",s.__class__.__name__ print len(s) s = myList("ABC") print s,"\t#",s.__class__.__name__ print len(s) >>> ex() [] # myList 0 ['A', 'B', 'C'] # myList 3
組み込み関数 len を使って、引数に指定した連結リストの要素数が得られます。
class myList(object): ... def __len__(self): return reduce(lambda n,e: n+1, self, 0)
メソッド __len__ は、組み込み関数 len に呼応して、シーケンス内の要素数を得る手段を提供します。組み込み関数 reduce を利用すると、このように簡潔に表現できます。
《Note》(次の課題で示す)for 文と比べて、より簡潔に表現できます。ただ self と記述するだけで、各要素 e を参照する手段には依存しない(情報隠蔽の原則に沿って)抽象的な表現ができるのも〈GoF〉Iterator パターンの効用のひとつです。
受講者への課題
for 文を利用すると、次のようになります。
def __len__(self):
n = 0
for _ in self:
n += 1
return n
reduce 版と比較して、その長所/短所について考察してください。■
Tips
Last updated♪09/03/11