Извините, если об этом уже спрашивали, но я не смог найти слова для поиска, которые бы дали мне ответ, который я ищу.
Я пишу скрипт, который содержит вспомогательную функцию, которая, в свою очередь, может вызывать одну из нескольких функций, которые принимают одинаковые параметры. В этой вспомогательной функции я получаю следующие строки:
if funcName="func1":
func1(p1, p2, p3)
elif funcName="func2":
func2(p1, p2, p3)
elif funcName="func3":
func3(p1, p2, p3)
...
Я знаю, что мог бы использовать другую вспомогательную функцию, которая также взяла бы строку funcName и передала бы ее соответствующей функции, но есть ли лучший способ сделать это? То, что мой мозг хочет сделать, это:
funcName(p1, p2, p3)
Таким образом, я могу вызвать произвольное имя функции, если захочу. Возможно ли что-то подобное?
3 ответа
Да, вы можете, используя dict
сопоставление имен с функциями:
funcs = dict(
func1=func1,
func2=func2,
func3=func3
)
funcs[funcName](p1, p2, p3)
Вы можете позвонить им в рамках locals
или globals
запроса:
locals()[funcName](p1, p2, p3)
Примере:
>>> a = lambda x: x+1
>>> locals()['a'](2)
3
Как указано ниже, вы можете проверить, находятся ли они в пределах ожидаемого:
if funcName in ["func1", "func2", "func3"]:
locals()[funcName](p1, p2, p3)
Если вы поместите функции внутри объекта следующим образом:
var funcs =
{
f1: function() {},
f2: function() {},
f3: function() {}
}
Вы можете сделать funcs['f1']()
например.
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.