Как в 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
→ Ссылка