2015-04-29 4 views
1

У меня есть маршрутизатор, который решает, какую функцию вызывать на основе ввода пользователя (использует 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? Если я предварительно создал карту функций для строк, могу ли я их выполнить?

Как вы это можете написать?

ответ

4

Да, построение карты строк для имен функций вполне допустимо:

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

И выполнить как:

task_map[task_name]() 

Помимо: попробуйте следовать PEP-8, руководство питона стиля; это помогает сделать ваш код более читаемым для всех других программистов Python. В частности, в этом случае предпочитайте имена функций underscore_separated вместо LeadingCaps.

+0

замечательно! благодаря тонну! – Cmag

+0

@Cmag добро пожаловать! :) – tzaman

0

Другой Hacky способ сделать это состоит в использовании globals(), если вы не работаете только за счет импорта функции router:

globals()[taskName]() 
Смежные вопросы