如何实现以函数为参数、动态匹配参数的Python通用area函数?
解决方案:实现通用的重复调用函数
当然可以实现!Python里函数是一等对象,再结合可变关键字参数,就能轻松搞定这个需求。下面是具体的实现步骤和代码:
首先先保留你原来的两个面积计算函数:
def areaSquare(a, b): print(a * b) def areaCircle(radius): print(3.14159 * radius ** 2)
接下来实现我们需要的area函数,它会接收目标函数、该函数所需的参数,以及重复次数repeat:
def area(func, **kwargs): # 从关键字参数中取出重复次数,默认值设为1(如果没传repeat的话) repeat = kwargs.pop('repeat', 1) # 循环指定次数,每次调用传入的目标函数,并传递剩余的关键字参数 for _ in range(repeat): func(**kwargs)
现在来测试你给出的示例:
- 五次打印圆的面积:
area(areaCircle, radius=3, repeat=5)
运行后会连续5次输出28.27431(也就是3.14159*9的结果)。
- 六次打印矩形的面积:
area(areaSquare, a=2, b=3, repeat=6)
这里纠正一下你描述里的小笔误,实际会打印2*3=6的结果六次,运行后会连续输出6次6。
为什么这个方案可行?
- 函数作为一等对象:Python允许把函数当作参数传递,所以我们可以直接把
areaCircle或areaSquare传给area函数。 - 可变关键字参数
**kwargs:这个语法会捕获所有传入的关键字参数(除了前面的func),我们可以从中分离出repeat,剩下的参数直接通过**kwargs解包后传给目标函数,这样不管目标函数需要多少个参数,只要调用时用关键字参数传递,都能正确匹配。
内容的提问来源于stack exchange,提问作者MrYouMath
相关产品推荐
相关产品推荐

