想象一下,我有两个功能
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
因此该函数将函数作为参数。根据作为参数传递给它的函数,它应该需要额外的参数。有没有办法实现这个目标?我知道函数重载是一种选择。但我不想为此目的定义多个功能。
答案 0 :(得分:4)
是的,kwargs是你的朋友。我们可以定义函数,以便在名为kwargs
的字典中捕获剩余的参数,然后传递给我们提供的函数。像:
def area(func, repeat, **kwargs):
for _ in range(repeat):
func(**kwargs)
因此除func
和repeat
之外的所有参数都存储在kwargs
字典中,稍后我们使用命名参数调用func
函数(第一个参数)。
请注意,对于需要func
和/或repeat
参数的函数,这将无效(正确),因为我们会在area
函数级别捕获这些函数。