如何在python中将所有参数转换为字典

How to convert all arguments to dictionary in python

我想我的函数func(*args, **kwargs)返回一个字典,其中包含我给它的所有参数。 例如:

1
func(arg1, arg2, arg3=value3, arg4=value4)

应该返回一个这样的字典:

1
{'arg1': value1, 'arg2': value2, 'arg3': value3, 'arg4': value4 }


您可以使用locals()vars()

1
2
3
4
5
6
def func(arg1, arg2, arg3=3, arg4=4):
    print(locals())

func(1, 2)

# {'arg3': 3, 'arg4': 4, 'arg1': 1, 'arg2': 2}

但是,如果您只使用*args,则无法使用locals()区分它们:

1
2
3
4
5
6
def func(*args, **kwargs):
    print(locals())

func(1, 2, a=3, b=4)

# {'args': (1, 2), 'kwargs': {'a': 3, 'b': 4}}


如果您不能像其他答案那样使用locals建议:

1
2
3
def func(*args, **kwargs):
    all_args = {("arg" + str(idx + 1)): arg for idx,arg in enumerate(args)}
    all_args.update(kwargs)

这将创建一个包含所有参数的字典,并带有名称。


您正在寻找locals()

1
2
3
4
def foo(arg1, arg2, arg3='foo', arg4=1):
    return locals()

{'arg1': 1, 'arg2': 2, 'arg3': 'foo', 'arg4': 1}

输出:

1
{'arg1': 1, 'arg2': 2, 'arg3': 'foo', 'arg4': 1}