Python一种函数,它将函数作为参数及其参数

时间:2018-04-11 19:46:00

标签: python function parameters overloading

想象一下,我有两个功能

def areaSquare(a,b):
   print( a * b)

def areaCircle(radius):
   print(3.14159 * radius ** 2)

我想创建一个名为area的第三个函数。

area(areaCircle,radius = 3, repeat = 5)
# prints 3.14159 * 9 five times
area(areaSquare, a = 2, b = 3, repeat = 6)
# prints 2 * 6 six times

因此该函数将函数作为参数。根据作为参数传递给它的函数,它应该需要额外的参数。有没有办法实现这个目标?我知道函数重载是一种选择。但我不想为此目的定义多个功能。

1 个答案:

答案 0 :(得分:4)

是的,kwargs是你的朋友。我们可以定义函数,以便在名为kwargs的字典中捕获剩余的参数,然后传递给我们提供的函数。像:

def area(func, repeat, **kwargs):
    for _ in range(repeat):
        func(**kwargs)

因此除funcrepeat之外的所有参数都存储在kwargs字典中,稍后我们使用命名参数调用func函数(第一个参数)。

请注意,对于需要func和/或repeat参数的函数,这将无效(正确),因为我们会在area函数级别捕获这些函数。