是否可以在 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
中对所需参数 arg1
、arg2
、arg3
.
是否存在进行您自己的验证
尽管我同意 Klaus D. 的观点,您可能正在尝试解决 non-problem 这里的问题。
我有一个函数接受一些参数并使用我字典中的一些变量(但不是全部):
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
中对所需参数 arg1
、arg2
、arg3
.
尽管我同意 Klaus D. 的观点,您可能正在尝试解决 non-problem 这里的问题。