我尝试用Python编写几个函数(dispatcher+场景特定函数和子函数),如下所示:
def dispatcher(event):
if event['name'] == 'func_a':
return func_a(event['data'])
# several elif statements here
elif event['name'] == 'func_n':
return func_n(event['data'])
def func_a(data):
""" multi-scenario function returning dict"""
# Scenario A
if data['certain_param'] == 'certain value':
# do something
# that takes several lines of code
return {'result': 'scenario A'}
# Scenario B
elif data['certain_param'] == 'another value':
# do something else
# that takes several lines of code
return {'result': 'scenario B'}
# some other elif scenarios go here
return {'result': 'Fail'}
# func_b(), func_c(), .... go here (similar to func_a())
def func_n(data):
""" similar logic to funcs a, b, ...."""
pass
我想把一个很长的func\u a()分解成几个子函数(每个场景一个)。这里有两个选项:
# makes 2 calls to each scenario sub-function (not ideal)
def func_a(data):
""" same func_a() above"""
# Scenario A
if func_a_scenario_a(data):
return func_a_scenario_a(data)
# other elifs
# Scenario N
elif func_a_scenario_n(data):
return func_a_scenario_n(data)
另一种编写函数a()的方法是:
# Not very Pythonic
def func_a(data):
result = func_a_scenario_a(data)
if result:
return result
result = func_a_scenario_b(data)
if result:
return result
# repeat for every scenario
有什么更好的方法来做上述工作?可能使用eval('some_func()')?或者别的什么?谢谢
您可以创建一个decorator,该decorator可以决定传递给它的包装函数的内容。decorator可以存储一个以函数名作为键的字典,以及一个要传递给与键同名的函数的关联值:
相关问题 更多 >
编程相关推荐