我经常编写更高级的包装函数来调用我之前在模块中编写的基本函数。重点是重用原始函数中的代码并执行额外但可选的操作。痛点是每当我更新基本函数的参数时,我必须在高级函数中调整它。有没有办法通过高级函数的编写方式使这种动态(如下所示)?或者总的来说是否有更好的解决方案?
我可以写一个包罗万象的通用函数,但我认为这会浪费代码。
它通常类似于下面的示例,但在其他包装器中使用更深层次的嵌套函数来添加其他可选参数。
高级/包装功能
def pb_jam_sandwich(sandwich, pb, jam=None):
if jam is None:
pb_sandwich(sandwich, pb)
else:
pb_sandwich(sandwich, pb)
add_jam(jam)
如果有效的话,我正在考虑这样的高级功能:
def pb_jam_sandwich(*args, jam=None):
if jam is None:
pb_sandwich(*args)
else:
pb_sandwich(*args)
add_jam(jam)
答案 0 :(得分:1)
我认为你的设计是倒退的。应该用更一般的函数来定义更具体的函数。
# Note: no default values
def pbandjsandwich(pb, sandwich, jam):
return pb + sandwich + jam
def pbsandwich(pb, sandwich):
return pbandjsandwich(pb, sandwich, 0)
现在,您可以询问是否需要单独的函数pbsandwich
,或者jam
的默认值是否足够:
def pbandjsandwich(pb, sandwich, jam=0):
return pb + sandwich + jam
至少可以更有效地避免第二次函数调用。