Страницы

Поиск по вопросам

среда, 29 января 2020 г.

Вызов функции по её строковому имени

#python #python_3x


Как выполнить функцию если ее имя содержится в переменной типа string?
    


Ответы

Ответ 1



Самый безопасный способ это собрать словарь функций: def func1(text): return text def func2(): return "" functions = {'func1':func1, 'func2':func2} Соответственно вызов будет functions['ваша строка']() Избегайте использования eval() всегда когда это возможно, и в карйнем случае используйте ast.literal_eval()

Ответ 2



Зная имя функции можно получить соответствующий объект функции в заданном пространстве имён. Если имя это глобальная функция в текущем модуле: f = globals()["имя"] Затем самый обычный вызов: f(a, b, c) Если функция из другого модуля, или это метод класса, объекта, итд то достать функцию можно используя getattr(): f = getattr(module, "имя") Не используйте eval(), exec() без необходимости: это не эффективно и может быть не безопасно (если строка из недоверенного ввода).

Ответ 3



Можно поступить так: In [1]: def example(value): ...: return value ** 2 ...: In [2]: func_name = 'example' In [3]: eval(func_name)(10) Out[3]: 100 Подробнее про eval() можно почитать тут.

Ответ 4



exec использует текущие глобальные и локальные пространства имён для выполнения кода: exec('print(123)') # 123

Комментариев нет:

Отправить комментарий