另一个函数的 lambda 函数,但强制固定参数

Jos*_* Vu 6 python lambda function

我刚从 Matlab 切换到 Python,我想使用 lambda 函数将f1(x,y)具有多个参数的函数映射到一个参数函数f2(x)以进行优化。我想,当我映射功能f2(x) <- f1(x,y=y1),然后y将保持不变,无论什么样y1的变化,在Matlab这是默认为事实,但如果我尝试在Python中,它不断变化如下例

>>> def f1(x,y):
>>>    return (x+y)
>>> y1 = 2
>>> f2 = lambda x: f1(x,y1)
>>> f2(1)
3
Run Code Online (Sandbox Code Playgroud)

我希望即使我改变也f2(1)保持3不变y1,但是如果我改变y1,整体f1(1)也会改变如下

>>> y1 = 5
>>> f2(1)
6
Run Code Online (Sandbox Code Playgroud)

我不知道有没有一种方式,当我宣布f2 = lambda x: f1(x,y1),然后f1将采取的值y1,当时并修复它f2。这样做的原因是因为我想为不同的场景动态创建不同的函数,然后将它们全部相加。我还是 Python 新手,请帮忙,非常感谢。

Ger*_*rat 7

尝试:

f2 = lambda x, y=y1: f1(x,y)
Run Code Online (Sandbox Code Playgroud)

您的问题与闭包在 Python 中的工作方式有关

您的 lambda 函数版本将使用当前版本的y1. 您需要在定义 lambda 函数的行上捕获的值y1。为此,您可以将其定义为参数(y=y1零件)的默认值。