0

これはpythonicの実装ですか?

存在しない関数を呼び出す可能性を減らすために、ラッパーを使用して文字列引数からネストされた関数を動的に呼び出しています。これは、arg1 と arg2 で異なる比較を実行したい例です (==、>=、< などに関して)...

class ComparisonClass(object):
    def__init__(self):
        pass

    def comparison(self,arg1,arg2,comparison):
        def equal_to():               
            pass
        def greater_than():
            pass
        def less_than():
            pass

        return locals()[comparison]()

    def comparison_equal_to(self,arg1,arg2):
        return self.comparison(arg1,arg2,'equal_to')

    def comparison_greater_than(self,arg1,arg2):
        return self.comparison(arg1,arg2,'greater_than')

    def comparison_less_than(self,arg1,arg2):
        return self.comparison(arg1,arg2,'less_than')
4

2 に答える 2

6

実装しようとしているものそのものが Pythonic ではないため、ここでは実装は関係ありません。

Python では、__eq__比較のために一連のメソッドを使用します。標準ライブラリには、それらのいくつかを他の観点から実装するためのツールが存在します。

于 2011-12-16T12:48:48.170 に答える
1

あなたが見逃しているのは、Python では関数が第一級のオブジェクトだということです。つまり、変数に割り当てて、他のオブジェクトと同じように渡すことができます。

したがって、関数をネストして親関数内で呼び出すのではなく、関連する関数を関数の戻り値として割り当て、戻り時に呼び出すだけです。または、関数を含むクラス レベルで辞書を割り当てることもできます。

def equal_to():
       pass

   (etc)

COMPARISONS = {
    'equal_to': equal_to,
    etc
}

これで、 を呼び出すことができますCOMPARISONS['equal_to'](arg1, arg2)

于 2011-12-16T13:25:06.863 に答える