类属性中的Lambda函数

时间:2018-12-11 22:00:13

标签: python class lambda syntax-error

任务:以给定的price作为输入,在self.priceTable中获得reqId

此类方法的代码确实按预期工作:

priceTable = self.priceTable
price = next(filter(lambda priceTable: priceTable['reqId'] == reqId, priceTable), None)

此代码给出了无效的语法错误:

price = next(filter(lambda self.priceTable: self.priceTable['reqId'] == reqId, self.priceTable), None)

这是怎么了?还有其他建议吗?

3 个答案:

答案 0 :(得分:1)

lambda后必须跟一个普通变量,就像一个函数的参数一样。您只需在self.priceTable的参数中提供filter

price = next(filter(lambda p: p['reqId'] == reqId, self.priceTable), None)

答案 1 :(得分:0)

self.priceTable不是有效的参数名称。参数应该只是名称,您可以将self.priceTable作为参数传递给lambda函数:

price = next(filter(lambda priceTable: priceTable['reqId'] == reqId, self.priceTable), None)

答案 2 :(得分:0)

您的问题尚不清楚,因为其中的代码太少,无法真正理解您要完成的任务-很抱歉,如果这不适用。但是,从目前的情况来看,我认为您根本不需要使用lambda或内置的filter函数即可完成任务。

相反,您可以使用现有的字典方法get()如下所示:

class Class:
    def __init__(self, **kwargs):
        self.priceTable = kwargs.copy()

    def get_price(self, reqId):
        return self.priceTable.get(reqId, None)

inst = Class(id1=1.23, id2=2.34, id3=3.56)
print(inst.get_price('id2'))  # -> 2.34
print(inst.get_price('id9'))  # -> None