Python.use(better) #Stack: step05 -- 高階関数
‖記事一覧‖ Python.use(better)《Python3.1》
step05 -- 高階関数
《著》小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/25 ● 第2版♪2004/06/01 ● 第3版♪2009/02/28
クラスを用いない OOP を実践することで、OOP の理解を深めます。
※ Python1.5 で作成した例題を、Python3.1 で再構成しました。
事例:モジュールを起動する
■ 全項目を確認する
$ python -i stack_func.py >>> do() 0: step00 -- def Stack(): 1: step01 -- def push(self, item): 2: step02 -- def pop(self): 3: step03 -- def __repr__(self): 4: step04 -- def __getattr__(self, name): 5: step05 -- higher order function 6: step06 -- closure >>>
■ 各項目を実行する
各ステップの「動作」を確認するには、関数 do に実引数を指定します。
>>> do(5) >>> # -------------------------------------------------- step05 >>> s = Stack(); s >>> s.push("A"), s (None, ['A']) >>> s.push("B"), s (None, ['A', 'B']) >>> s.pop(), s ('B', ['A']) >>> s.pop(), s ('A', ) >>> s.pop(), s IndexError: pop from empty list (None, []) >>>
- 空のスタック s を用意します。
- push 操作でスタック s に要素を積むとともに、None がリターン値として得られます。
- pop 操作でスタック s から要素を降ろすとともに、その要素がリターン値として得られます。
- 空のスタックに pop 操作を適用しようとすると、例外 IndexError を生成します。
事例:コードの解説
def Stack(): class Tips(object): def __repr__(self): return self.__repr() self = Tips(); del Tips self._Tips__repr = lambda: repr(self.items) self.items = [] #1: self.push = push(self) self.pop = pop (self) return self def push(self): #2: def push_(item): self.items.append(item) return push_ def pop(self): #3: def pop_(): try: return self.items.pop() except IndexError as error: print("IndexError:", error) return pop_