#python #function-call
Вопрос:
Мое заявление заключается в следующем:
- У меня есть функция исполнителя, которая должна выполнить некоторый код на основе переключателя, который отправляется в качестве аргумента. Он сохраняет ссылки на несколько функций и выбирает необходимую функцию на основе переключателя. Дело в том, что эти функции имеют разное количество параметров.
напр.
class Execute:
def func1(self, f1_arg):
print("f1_arg", f1_arg)
def func2(self, f2_arg1, f2_arg2):
print("arguments: %s and %s" % (f2_arg1, f2_arg2))
def executor(self, sw):
available_functions = {
"sw1": self.func1,
"sw2": self.func2
}
predefined_arguments = {
"sw1": "f1_argument",
"sw2": ("f2_argument1", "f2_argument2")
}
# this is pseudo code, I have no idea how to do it
available_functions[sw](predefined_arguments[sw])
Комментарии:
1. Всегда ли аргументы внутри статичны
executer
?2. Причина
eval
, по которой он считается опасным, заключается в том, что он обладает такой способностью.3. В случае
sw2
, если вы просто передаете один кортеж в качестве аргумента. Вместо этого также создайте аргументsw1
кортежа (("f1_argument",)
), а затем распакуйте кортежи в вызове функцииavailable_functions[sw](*predefined_arguments[sw])
4. Это в основном то, что
functools.partial
делает.p = partial(func1, arg1); p()
это то жеfunc1(arg1)
самое, что .5. Спасибо, ребята. Дело в том, что это слишком упрощенный пример. Функции, которые я должен вызывать, взяты из модуля, который я не могу изменить. Кроме того, функции имеют статические аргументы … так что никаких *аргументов