2011-12-16 54 views
0

这是一个pythonic实现吗?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') 

回答

1

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

因此,不是嵌套一个函数并在父函数中调用它,而只是想将相关函数作为函数的返回值分配,并在返回时调用它。甚至更好,分配一个字典,包含功能一流水平:

def equal_to(): 
     pass 

    (etc) 

COMPARISONS = { 
    'equal_to': equal_to, 
    etc 
} 

现在,您可以拨打COMPARISONS['equal_to'](arg1, arg2)

6

实现是无关紧要的,因为这里非常的事你寻求实现ISN Pythonic。

在Python中,我们使用__eq__家族的方法进行比较,并且存在标准库中用于实现其中一些方法的工具。

+0

感谢您的回答!我对Python相当陌生,对__eq__系列不熟悉。当然,我会寻找文件,但你能否给我一个简单的解释它是什么?如果我补充说还有更多的比较(也就是说,greater_than()涉及的不仅仅是要求'是arg1> arg2'),还可能有所帮助,但为简单起见,我在此省略了这些。我想我真的不应该指定比较,只是询问它是否是动态调用嵌套函数的pythonic实现?道歉,如果我在任何地方错过了点! – burn5 2011-12-16 13:18:50