Pythonistaで自分専用RPN電卓を作る(03)

重複した処理について

四則演算の機能は実現できましたが、それぞれの関数で同じコードが繰り返されています。 四則演算だけならまだマシですが、今後計算機能を拡充していくと、どんどんコードが汚くなってしまいそうです。

今のうちになんとかします。

class RPN():
    _stack = []

    def push(val):
        RPN._stack.append(val)

    def pop():
        return RPN._stack.pop()

    def add(val):
        x = RPN._stack.pop()
        y = x+val
        RPN._stack.append(y)
        return y

    def sub(val):
        x = RPN._stack.pop()
        y = x-val
        RPN._stack.append(y)
        return y

    def mul(val):
        x = RPN._stack.pop()
        y = x*val
        RPN._stack.append(y)
        return y

    def div(val):
        x = RPN._stack.pop()
        y = x/val
        RPN._stack.append(y)
        return y

演算機能を実現する関数は、

順番 処理
(1) スタックから数値を取り出す
(2) 計算する
(3) 計算結果をスタックに格納
(4) 返値を返す

という構造になっていて、(2)の計算処理だけが異なります。 これを関数外部から切り替えることができれば、重複する処理を1つの関数にまとめることができます。

調べてみると、lambda関数でこれが実現できそうなことが分かりました。