从函数

时间:2015-04-22 13:58:11

标签: python function

我的功能如下:
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来拟合数据。我想要修复的一些参数(在拟合期间不会改变)。

1 个答案:

答案 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