Python的? ...动态调用嵌套函数

时间:2011-12-16 12:45:42

标签: python nested-function locals

这是一个pythonic实现吗?

我正在使用包装器从字符串参数动态调用嵌套函数,以减少调用不存在的函数的机会。这是一个例子,我想对arg1和arg2进行不同的比较(根据==,> =,< etc)......

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')

2 个答案:

答案 0 :(得分:6)

这里的实现无关紧要,因为你想要实现的东西不是Pythonic。

在Python中,我们使用__eq__系列方法进行比较,标准库中存在用于根据其他方法实现其中一些方法的工具。

答案 1 :(得分:1)

你缺少的是在Python中,函数是一流的对象。这意味着它们可以被分配给变量并像其他任何对象一样传递。

因此,您只需要将相关函数指定为函数的返回值,并在返回时调用它,而不是嵌套函数并在父函数中调用它。或者甚至更好,在类级别分配包含函数的字典:

def equal_to():
       pass

   (etc)

COMPARISONS = {
    'equal_to': equal_to,
    etc
}

现在您可以致电COMPARISONS['equal_to'](arg1, arg2)