这是一个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')
答案 0 :(得分:6)
这里的实现无关紧要,因为你想要实现的东西不是Pythonic。
在Python中,我们使用__eq__
系列方法进行比较,标准库中存在用于根据其他方法实现其中一些方法的工具。
答案 1 :(得分:1)
你缺少的是在Python中,函数是一流的对象。这意味着它们可以被分配给变量并像其他任何对象一样传递。
因此,您只需要将相关函数指定为函数的返回值,并在返回时调用它,而不是嵌套函数并在父函数中调用它。或者甚至更好,在类级别分配包含函数的字典:
def equal_to():
pass
(etc)
COMPARISONS = {
'equal_to': equal_to,
etc
}
现在您可以致电COMPARISONS['equal_to'](arg1, arg2)
。