2012年2月15日水曜日

python で記憶つきの関数を作る

関数に静的変数を使いたいときは、 クラス +  __call__ を使う。
オブジェクトを作っておけば、そのオブジェクトを呼び出したとき (= __call__呼び出し) に色々できる。


例えば、3の倍数が与えられたときだけカウントする関数 memory
class Memory:
    def __init__(self):
        self.count = 0
    def __call__(self, i):
        if i % 3 == 0:
            self.count += 1
        return self.count

if __name__ == "__main__":
    memory = Memory()
    for i in range(10):
        print i, memory(i)


結果が以下。
左列がカウント, 右列が3で割った余りが0の数。

0 1
1 1
2 1
3 2
4 2
5 2
6 3
7 3
8 3
9 4


0 件のコメント:

コメントを投稿