我想创建一个类似于以下内容的包装函数:
def functionWrapper(function, **kwargs):
"""
This function requires as input a function and a dictionary of named arguments for that function.
"""
results=function(**kwargs)
print results
def multiply(multiplicand1=0, multiplicand2=0):
return multiplicand1*multiplicand2
def main():
functionWrapper(
multiply,
{
'multiplicand1': 3,
'multiplicand2': 4,
}
)
if __name__ == "__main__":
main()
我遇到了这个实现的困难:
TypeError: functionWrapper() takes exactly 1 argument (2 given)
我该如何解决这个问题?我在包装函数function(**kwargs)
中使用任意函数是否合理?谢谢你的帮助。
编辑:字典规范中的修正错误
答案 0 :(得分:3)
将dict项目传递给该函数时使用**;
**{
'multiplicand1': 3,
'multiplicand2': 4,
}
<强>输出:强>
12
正如@svk在评论中指出的那样,functionWrapper
的doctstring说:
此函数需要输入一个函数和一个named的字典 该函数的参数。
因此,在这种情况下,您需要将函数定义更改为:
def functionWrapper(function, kwargs):
并修复字典中的拼写错误,否则你会得到0作为答案:
'multiplicand1': 3,
'multiplicand1': 4, #Change this to 'multiplicand2
答案 1 :(得分:2)
只需在功能保护中将**kwargs
更改为kwargs
:
def functionWrapper(function, kwargs):
答案 2 :(得分:1)
我觉得这个问题的精神也在乞求这个答案,让它成为一个更普遍的包装。
def functionWrapper(func, *args, **kwargs):
results = func(*args, **kw)
print results
def multiply(multiplicand1=0, multiplicand2=0):
return multiplicand1*multiplicand2
if __name__ == "__main__":
functionWrapper(multiply, multiplicand1=3, multiplicand2=4)
# 12
functionWrapper(multiply, 3, 4)
# 12
functionWrapper(multiply, 3)
# 0
functionWrapper(multiply)
# 0
functionWrapper(multiply, 5, multiplicand2=4)
# 20