我想让我的函数func(*args, **kwargs)
返回一个包含我传递给它的所有参数的字典。例如:
func(arg1, arg2, arg3=value3, arg4=value4)
应该返回一个像这样的字典:
应该返回一个像这样的字典:
{'arg1': value1, 'arg2': value2, 'arg3': value3, 'arg4': value4 }
我想让我的函数func(*args, **kwargs)
返回一个包含我传递给它的所有参数的字典。例如:
func(arg1, arg2, arg3=value3, arg4=value4)
应该返回一个像这样的字典:
{'arg1': value1, 'arg2': value2, 'arg3': value3, 'arg4': value4 }
locals()
或 vars()
:def func(arg1, arg2, arg3=3, arg4=4):
print(locals())
func(1, 2)
# {'arg3': 3, 'arg4': 4, 'arg1': 1, 'arg2': 2}
但是,如果您仅使用*args
,则无法使用locals()
进行区分:
def func(*args, **kwargs):
print(locals())
func(1, 2, a=3, b=4)
# {'args': (1, 2), 'kwargs': {'a': 3, 'b': 4}}
{'arg1': 1, 'arg2': 2, 'arg3': 3, 'arg4': 4}
。 - Nuageux{ 'args': ({'argX': 'x', 'argY': 'y}, 'arg1': 1) , kwargs': {}}
而不是期望的结果 {'arg1': 1, 'argX': 'x', 'argY': 'y'}
。 - nimilocals()
函数。def foo(arg1, arg2, arg3='foo', arg4=1):
return locals()
{'arg1': 1, 'arg2': 2, 'arg3': 'foo', 'arg4': 1}
输出:
{'arg1': 1, 'arg2': 2, 'arg3': 'foo', 'arg4': 1}
locals
这个词太宽泛了。 - chepner如果您无法像其他答案建议的那样使用locals
:
def func(*args, **kwargs):
all_args = {("arg" + str(idx + 1)): arg for idx,arg in enumerate(args)}
all_args.update(kwargs)
dict(arg1=arg1, arg2=arg2, arg3=value3, arg4=value4)
。你实际上想要达到什么目的? - chepnerarg1 = {'x': 'X', y': 'Y'}
arg2 = 2
,函数func(arg1, arg2, arg3=3)
应返回{'x': 'X', y': 'Y, 'arg2': 2, 'arg3':3}
。 - nimi