我的功能如下:
def foo(a, b, c):
return a+b+c
现在我想将b修改为2并创建签名:
def bar(a, c):
return foo(a, 2, c)
另一个选择是使用lambda函数:
bar = lambda a, *args: foo(a,2,*args)
但这也不是很好,因为我必须知道b之前有多少个参数。
functools.partial
部分解决了这个问题:
bar = partial(foo, b=2)
但是,它有一个签名bar(a, b=2, c)
而不是bar(a,c)
有更好的解决方案吗?
背景:目前,我尝试使用scipy.optimize.minimize来拟合数据。我想要修复的一些参数(在拟合期间不会改变)。
答案 0 :(得分:1)
考虑嵌套函数,如果符合您的需要。 一个很棒的blog post关于嵌套/装饰器函数
>>> def outer(a, c):
... def inner(b=2):
... return a+b+c
... return inner
...
>>> dec = outer(3,5)
>>> print dec()
10