理解Python中的Lambda函数

时间:2014-11-23 15:02:42

标签: python lambda

我正在尝试理解我的教授使用下面的Lambda函数给我的代码。我基本上很难理解l.TestSample(1, "GOOG")如果没有定义lambda函数中的multiplier导致输出结果(据我所知),因此会产生错误。

#define a class
class LambdaSample(object):


#just a simple method that returns prices
def GetPrices(self):
    return {"GOOG":1080, "MSFT":30}


#executing
def TestSample(self, fxrate, ticker):
    #using 
    self.GetBasePrice = lambda multiplier, ticker: self.GetPrices()[ticker] * multiplier
    print(self.GetBasePrice(fxrate, "GOOG"))
    #continue doing more processing below
    #.....



l = LambdaSample()
l.TestSample(1, "GOOG")

print l.GetBasePrice(1, "GOOG")

谢谢

3 个答案:

答案 0 :(得分:1)

乘数是您为属性 GetBasePrice 分配的lambda函数的第一个参数 在 TestSample 方法中调用此函数时,会为其指定 fxrate 参数的值。

仍然是一个奇怪的例子......

修改

在这个例子中,lambda函数和封闭函数之间没有绑定连接(一个坏的,我必须说)。 lambda函数用法的更好例子是一个关键,例如

In [13]: target = tuple((x, -x) for x in range(10))

In [14]: max(target, key=lambda x: x[0])
Out[14]: (9, -9)

In [15]: max(target, key=lambda x: x[1])
Out[15]: (0, 0)

正如您所看到的,我使用lambda函数来设置最大值搜索的条件。 在第一种情况下,标准是内部元组的第一个元素,第二个是最后一个元素。

答案 1 :(得分:1)

代码包含lambda函数:lambda multiplier, ticker: self.GetPrices()[ticker] * multiplier。所以multiplier是这个函数吞噬的参数。

出于您的目的,表达式实际上是以下的简短形式:

def anonymous_function(self,multiplier,ticker):
    return self.GetPrices()[ticker] * multiplier

答案 2 :(得分:0)

Python中的lamba函数采用以下形式:

lambda x: something(x)

相当于

def lambda_fn(x):
    return something(x)

所以,在你的情况下,乘数和自动收报机不是变量,而是lambda函数的参数。与你的工作方式类似

def test(ahdlkashdanlifblwaef):

没有任何问题,你也可以

lambda ahdlkashdanlifblwaef: <something here>

也不必担心ahdlkashdanlifblwaef是什么。它只是一个名字。

在教授的示例中,行self.GetBasePrice = lambda multiplier, ticker: self.GetPrices()[ticker] * multiplier等同于:

def GetBasePrice(self, multiplier, ticker):
    return self.GetPrices()[ticker * multiplier

这实际上是使用lambda的一种相当迟钝的方式,因为lambda函数应该是匿名的,一次性/一次性函数;不是实例方法。 lambda的一个更好的例子是:

str_list.sort(key=lambda text: len(text))

这里使用lambda快速定义一个将字符串text转换为其长度的函数,并使用该lambda函数作为对列表str_list进行排序的键。