在Python中,从多个变量的函数创建一个单个变量的函数

在Python中,从多个变量的函数创建一个单个变量的函数,python,function,Python,Function,我的问题是由scipy.optimize.minimize()函数引起的 我有一个目标函数f(x,const1,const2),我想为x最小化,其中const1和const2的值在f内保持不变 如何声明g(x)=f(x,常数1,常数2)以便将g传递给minimize()函数 我目前正在使用全局变量,但解决方案变得相当混乱。最快/最简单的方法可能是使用pythonpartial函数。具体来说,如果您向它传递一系列arg和kwarg,它将返回一个新函数,其中这些输入将被冻结。例如: g = lamb

我的问题是由
scipy.optimize.minimize()
函数引起的

我有一个目标函数
f(x,const1,const2)
,我想为
x
最小化,其中
const1
const2
的值在
f
内保持不变

如何声明
g(x)=f(x,常数1,常数2)
以便将
g
传递给
minimize()
函数


我目前正在使用全局变量,但解决方案变得相当混乱。

最快/最简单的方法可能是使用python
partial
函数。具体来说,如果您向它传递一系列arg和kwarg,它将返回一个新函数,其中这些输入将被冻结。例如:

g = lambda(x): f(x, const1, const2)
from functools import partial
g = partial(f, const1=const1, const2=const2)
g(x)
将等价于:
f(x,const1=const1,const2=const2)

也可以对位置arg而不是kwarg执行与上面相同的操作。有关更完整的治疗方法,请参阅

您可以通过一个
lambda
函数来实现这一点,就像testuser的回答一样,但是您必须处理额外的开销,这有点违反了python的zen:

应该有一个——最好只有一个——显而易见的方法来做到这一点


最快/最简单的方法可能是使用python
partial
函数。具体来说,如果您向它传递一系列arg和kwarg,它将返回一个新函数,其中这些输入将被冻结。例如:

from functools import partial
g = partial(f, const1=const1, const2=const2)
g(x)
将等价于:
f(x,const1=const1,const2=const2)

也可以对位置arg而不是kwarg执行与上面相同的操作。有关更完整的治疗方法,请参阅

您可以通过一个
lambda
函数来实现这一点,就像testuser的回答一样,但是您必须处理额外的开销,这有点违反了python的zen:

应该有一个——最好只有一个——显而易见的方法来做到这一点

你试过了吗?你试过了吗?