Python Lambda函数

Python Lambda函数,python,function,lambda,Python,Function,Lambda,这里有个函数,谁能解释一下这里发生了什么? 我知道函数体中发生了什么,但不知道lambda函数是如何工作的 我不熟悉lambda函数,因此我不确定该函数返回的方式或内容。t和c到底是什么 def get_梯度(self、A、b、x、beta): 返回值(λt,c:(2*self.lambda_*x-A.t@(b*t)/c,和(-b*t)/c))(1/(1+np.exp(b)*(A@x+beta))),A.shape[0] A是矩阵,b和x是列向量,beta和lambda是标量,这里,get\u

这里有个函数,谁能解释一下这里发生了什么? 我知道函数体中发生了什么,但不知道lambda函数是如何工作的 我不熟悉lambda函数,因此我不确定该函数返回的方式或内容。t和c到底是什么

def get_梯度(self、A、b、x、beta):
返回值(λt,c:(2*self.lambda_*x-A.t@(b*t)/c,和(-b*t)/c))(1/(1+np.exp(b)*(A@x+beta))),A.shape[0]
A是矩阵,b和x是列向量,beta和lambda是标量,这里,
get\u gradient(self,A,b,x,beta)
返回一个函数。换句话说,它是一个定义另一个函数并将其作为输出返回的函数。如果您想根据不同类型的参数定义多个函数,它很有用

我将向您介绍有关
lambda
函数及其典型用途的更多信息

但在您的情况下,一个更简单的示例可能会帮助您了解发生了什么!假设您有:

def f(a):
    return lambda x: x**a
这里,f返回一个函数,该函数将a的幂应用于其输入

一旦你有了这个,你可以做:

g = f(2)
其结果与您所做的基本相同:

def g(x):
    return x**2
无论哪种情况,您现在都可以执行以下操作:

g(5)

# > 25

看起来您缺少了最后一个结束括号,所以我认为应该是:

def get_gradient(self, A, b, x, beta):
    return (lambda t,c: (2*self.lambda_*x - A.T@(b*t)/c, sum(-b*t)/c))(1/(1+np.exp(b*(A@x+beta))), A.shape[0])
这与执行以下操作相同:

def get_gradient(self, A, b, x, beta):
    def fn(t, c):
        return (2*self.lambda_*x - A.T@(b*t)/c, sum(-b*t)/c))
    return fn(1/(1+np.exp(b*(A@x+beta))), A.shape[0])
这与:

def get_gradient(self, A, b, x, beta):
    t = 1/(1+np.exp(b*(A@x+beta)))
    c = A.shape[0]
    return (2*self.lambda_*x - A.T@(b*t)/c, sum(-b*t)/c))

在我的例子中,t和c到底是什么?@SharhadBashar,它们只是传递到正在返回的函数中的参数。就像这里的示例中的
x
。确实如此。正如@Chris所说,
t
c
是第一个函数
get\u()将返回的函数的参数
。换句话说,一旦您使用了由
get\u gradient()
返回的函数,它们将被使用并需要指定。好的,我想我现在理解了t=1/(1+np.exp(b*(A@x+beta))c=A.shape[0]lambda表达式只是创建函数的表达式。lambda函数与
def
语句创建的函数没有区别。