是否可以在 Python 中的包装器中传递字典?

Is it possible to pass a dictionary in a wrapper in Python?

我有一个函数接受一些参数并使用我字典中的一些变量(但不是全部):

def my_fun(arg1, arg2, arg3, **my_dict):
    does something...

    return output

我需要为此函数创建一个只接受 1 个参数的包装器,因为我使用的是多处理池包(它只允许 1 个参数):

def wrapper(arg):
    output = my_fun(arg)

是否可以使用 arg 以某种方式通过包装器传递 arg1, arg2, arg3, **my_dict

当我尝试时:

def wrapper(**arg):
    output = my_fun(arg)

我收到错误 TypeError: wrapper() takes 3 positional arguments but 4 were given. 提前致谢!

dic = {"a":1,"b":2}

def my_fun(arg1, arg2, arg3, **dic):
    output = arg1, arg2, arg3, dic
    return output

def wrapper(arg):
    return my_fun(arg[0],arg[1], arg[2], **dic)


x = wrapper([1,2,3, dic])
print(x)

输出:

(1, 2, 3, {'a': 1, 'b': 2})

您不能将 **dict 放入包装器中,因为 ** 是函数签名语法的一部分,在其他地方没有任何意义。

您希望 my_fun 接受 3 个强制位置参数,后跟零个或多个关键字参数,并且您希望将它们放在一个可以作为单个参数传递的包装器中。一种方法是将字典传递给您的函数

kwargs=dict(arg1=1, arg2=2, arg3=3, arg4="four", arg5="five")
output = my_fun(**kwargs)

然后在 my_fun 中对所需参数 arg1arg2arg3.

是否存在进行您自己的验证

尽管我同意 Klaus D. 的观点,您可能正在尝试解决 non-problem 这里的问题。