2016-04-19 2 views
0

Я хочу, чтобы выбрать функцию на основе значения словаря:питона выбрать функцию, основанную на значении в словаре

dict = {"func_selector":"func1", "param_value":"some_value"} 

# defined a function 
def func1(param): 
    # some function code 

Теперь я хочу, чтобы выбрать функцию на основе значения некоторого ключа , так что он может достичь что-то вроде:

# calling a function based on some dict value 
dict["func_selector"](dict["param_value"]) 

синтаксис, вероятно, неправильно, но мне интересно, если это возможно, чтобы сделать это в Python или что-то подобное.

+3

Почему вы не храните функцию непосредственно, а не строку? 'dict = {" func_selector ": func1," param_value ":" some_value "}' – Delgan

ответ

1

Попробуйте хранить значение функции в словаре, вместо его имени:

def func1(param): 
    print "func1, param=%r" % (param,) 

d = {"func_selector":func1, "param_value": "some value"} 

Тогда вы можете сказать:

>>> d['func_selector'](d['param_value']) 
func1, param='some value' 
+0

OP указано Python 3, 'print' отсутствует скобки –

1

Лучший подход ИМО сделать это как этот

def func1(param): 
    #code 

some_value = ... #The value you need 
my_dict = {"func_selector": func1, "param_value": some_value } 

А затем

my_dict["func_selector"](my_dict["param_value"]) 

Теперь, если у вас есть только имя функции, которую нужно вызвать getattr

И называют это

getattr(my_class, my_dict["func_selector"])(my_dict["param_value"]) 

my_class класс, который содержит метод. Если это не в классе, я думаю, вы можете пройти self

+1

' self' не определен вне классов, вы можете использовать 'locals()' или 'globals()' вместо –

Смежные вопросы