我正在尝试理解我的教授使用下面的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")
谢谢
答案 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
进行排序的键。