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 回答