#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
Комментариев нет:
Отправить комментарий