@leham1

Возможно ли вызвать функцию, если есть только ее наименование в строковом виде?

Здравствуйте.
У меня есть список в котором находятся много наименований фукнции в строковом виде. Например: ['fanc1', 'fanc2', 'fanc3'.....]. Я знаю что если бы они были без кавычек, то их можно было бы вызвать. Но меня интересует вопрос можно ли их вызвать если есть только их наименование в строковом виде?
Если это возможно, то как это сделать?
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Если эти функции объявлены в твоем коде, то может помочь функция globals(). Она возвращает словарь всех глобально доступных именованных объектов в твоем скрипте - функций, классов, глобальных переменных.

Если же эти функции все входят в один модуль, или являются методами одного объекта (обозначим владельца функций как obj), то можно сделать и так:
func = getattr(obj, 'funcname')
func()

Наконец, и я бы посоветовал именно так, тебе никто не запрещает сделать самому словарь вида:
accepted_funcs = { 'func1': func1, 'func2': func2 }
Тогда ты просто вызываешь accepted_funcs['funcname'](). Этот способ позволяет гарантировать, что неожиданный внешний ввод не приведет к вызову какой-то неожиданной посторонней функции. Любое имя функции, не входящей в словарь, спровоцирует исключение.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы