python - 如何在 Python 的包装函数中使用任意函数

标签 python function wrapper keyword-argument

我想创建一个如下所示的包装器函数:

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) 中使用任意函数是否合理?感谢您的帮助。

编辑:修复了字典规范中的错误

最佳答案

将字典项传递给该函数时使用**;

**{
   'multiplicand1': 3,
   'multiplicand2': 4,
  }

输出:

12

正如@svk 在评论中指出的,functionWrapper 的 docstring 说:

This function requires as input a function and a dictionary of named arguments for that function.

所以在这种情况下,您需要将函数定义更改为:

def functionWrapper(function, kwargs):

并修正字典中的拼写错误,否则你将得到 0 作为答案:

'multiplicand1': 3,
'multiplicand1': 4,  #Change this to 'multiplicand2

'

关于python - 如何在 Python 的包装函数中使用任意函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20426835/

相关文章:

javascript - 获取匿名函数名

versioning - 执行包装器库的 semver(语义版本控制)的最佳做法是什么?

c++ - 如何使用 SOCI C++ Database 库?

python - re.sub(...) 替换最左边的事件?

python - 帮助解释代码片段

python - 渐变剪裁似乎在 None 上窒息

python - 如何在 Pandas 中滚动非重叠窗口

javascript - 如何从同一对象的(箭头)函数访问对象的属性

c# - 夜间检查功能 c#

java - 为什么 Java 中的包装器类的行为不像引用类型?