Как в python передать функции аргументы из строковой переменной
Предположим, у нас есть функция, принимающая произвольное количество аргументов, в том числе и именованных:
def my_function(*args, **kwds):
print(args)
for key, value in kwds.items():
print(f"{key}={value}")
Есть строковая переменная, содержащая аргументы, которые нужно передать в функцию:
parameters = "1, 2, 'abc', arg1 = 5, arg2 = 'string'"
Как передать функции аргументы из этой строки? Мне нужно, чтобы выполнилось вот так:
my_function(1, 2, 'abc', arg1 = 5, arg2 = 'string')
Парсить parameters? Есть ли способ проще?
Спасибо!
Ответы (2 шт):
Автор решения: Константин
→ Ссылка
Методом строки split() и парсить список.Проще,если поменять подход алгоритма в сторону enum.Делаю так,допустим из командной строки приходит "make_img".У меня
act1=0
act2=1
make_img = 2
comms=['act1','act2','make_img']
ind=comms.index('make_img')
...
op=ind
if op==make_img:
# ops1
elif op==act1
# ops2
Так строки могут стать литералами программы)
Автор решения: CrazyElf
→ Ссылка
Парсинг аргументов подсмотрен на англоязычном СО.
Готовый пример с использованием вашей функции и параметров:
import ast
def parse_args(args):
args = 'f({})'.format(args)
tree = ast.parse(args)
funccall = tree.body[0].value
args = [ast.literal_eval(arg) for arg in funccall.args]
kwargs = {arg.arg: ast.literal_eval(arg.value) for arg in funccall.keywords}
return args, kwargs
def my_function(*args, **kwds):
print(args)
for key, value in kwds.items():
print(f"{key}={value}")
parameters = "1, 2, 'abc', arg1 = 5, arg2 = 'string'"
args, kwargs = parse_args(parameters)
my_function(*args, **kwargs)
Вывод:
(1, 2, 'abc')
arg1=5
arg2=string