@NikClik

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

Проблема в том, что функции которые мне нужно вызывать лежат в других модулях а это значит, что их вызов будет примерно таким "package_name.function_name(arg1, arg2, arg3)" (это учитывая, что я импортировал модуль as package_name, а у меня 5 модулей импортированных под разными именами), как мне получив эту строку можно обратиться прямо к функции и передать в нее все необходимые аргументы? getattr() пробовал, функции с аргументами он не видит. и пожалуйста, не надо мне рассказывать про парсинг, пропарсить это я смогу, я не знаю как это запустить.
  • Вопрос задан
  • 1488 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
import ast

def parse(s):
    last_dot_pos = s.rindex('.')
    first_bracket_pos = s.index('(')
    pkg_name = s[:last_dot_pos]
    f_name = s[last_dot_pos+1:first_bracket_pos]
    args = ast.literal_eval(s[first_bracket_pos+1:-1])
    return pkg_name, f_name, args


pkg_name, f_name, args = parse('some_package.some_func(3, 5)')

m = __import__(pkg_name)
f = getattr(m, f_name)
f(*args)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Helow19274
exec('package_name.function_name(arg1, arg2, arg3)')
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы