Как передать параметры в таблицу отправки Python
Я пытаюсь построить отправку следующим образом:
def run_nn(type=None):
print type, 'nn'
return
def run_svm(type=None):
print type, 'svm'
return
action = {'nn' : run_nn( type=None),
'svm' : run_svm(type=None),}
Я хочу, чтобы функция выполнялась только при вызове с чем-то вроде:
action.get('nn',type='foo')
С ожиданием его распечатать:
foo nn
Но это нарушает предоставление:
TypeError: get() takes no keyword arguments
Какой правильный способ сделать это?
Кроме того, две функции run_nn()
а также run_svm()
были казнены даже без вызова. Я не хочу этого Как я могу избежать этого?
1 ответ
Вы вызываете функции при создании словаря. Вместо этого вы должны поместить объекты функций в dict, не вызывая их. И потом, get
соответствующую функцию из dict и вызовите ее с ключевым словом аргумента.
То, что вы хотите, это:
action = {'nn' : run_nn,
'svm' : run_svm,}
...
action.get('nn')(type='foo') # get function object from dict and then call it.
Я предлагаю вам использовать action['nn']
над action.get('nn')
так как вы не указываете какой-либо вызываемый по умолчанию в get
Способ; get
метод возвращает None
когда вы не указываете один. KeyError
гораздо более интуитивно, чем TypeError
В этом сценарии объект NoneType не вызывается.
С другой стороны, вы можете оставить return
заявления, поскольку вы на самом деле ничего не возвращаете. Ваша функция все еще вернется без них.
Кстати, у меня есть чувство, что ваши функции хотят изменить поведение в зависимости от type
(хотя ваш type
нелогично, поскольку это всегда строка). В любом случае, вы можете взглянуть на functools.singledispatch
, Это преобразует ваши функции в универсальную функцию с одной отправкой с возможностью создания нескольких перегруженных реализаций.
Наконец, хотя type
делает хорошее имя аргумента, вы столкнетесь с проблемами, когда вам нужно использовать встроенный type
в вашей функции.