任务:以给定的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)
这是怎么了?还有其他建议吗?
答案 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