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

2024-10-03 00:22:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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()

我在实施过程中遇到了困难:

^{pr2}$

我该如何解决这个问题?我在包装器函数function(**kwargs)中使用任意函数是否合理?谢谢你的帮助。在

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


Tags: and函数inputmaindefasfunctionthis
3条回答

将dict项传递给该函数时使用**

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

输出:

^{pr2}$

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

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

'

我觉得这个问题的精神也在乞求这个答案,让它成为一个更一般的包装。在

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

只需在函数防御中将**kwargs更改为kwargs

def functionWrapper(function, kwargs):

What does ** (double star) and * (star) do for parameters?

相关问题 更多 >