将返回的字符串映射到特定函数

时间:2015-04-29 02:00:23

标签: python

我有路由器根据用户输入决定调用哪个函数(使用ConfigParser),然后尝试决定调用哪个函数。

def SomethingElse():
    print 'hello'

def UploadDirectory():
    print 'hi'

def router(config):
    if config.has_option('job', 'Some_Task'):
        taskName = config.get('job', 'Some_Task')
        # taskName is now 'UploadDirectory'
        ###execute the UploadDirectory function
        ###execute something else if something else, etc

那么在python中编写这个的方法是什么?如果我预先建立了一个函数映射到字符串,我可以这样执行吗?

你会怎么写这个?

2 个答案:

答案 0 :(得分:4)

是的,为函数名构建字符串映射是完全有效的:

task_map = {
    'upload': UploadDirectory,
    'something': SomethingElse,
}

执行as:

task_map[task_name]()

除此之外:尝试遵循蟒蛇风格指南PEP-8;它有助于使您的代码对所有其他Python程序员更具可读性。特别是在这种情况下,更喜欢underscore_separated个函数名而不是LeadingCaps

答案 1 :(得分:0)

另一种执行此操作的方法是使用globals(),如果您仅仅通过导入router功能而无法运行:

globals()[taskName]()