Лямбда-функция в атрибуте класса - PullRequest
0 голосов
/ 12 декабря 2018

Задача: Получить 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 голосов
/ 12 декабря 2018

lambda должна сопровождаться обычной переменной, это как параметры функции.Вам нужно только указать self.priceTable в качестве аргумента filter:

price = next(filter(lambda p: p['reqId'] == reqId, self.priceTable), None)
0 голосов
/ 12 декабря 2018

Ваш вопрос неясен, потому что в нем слишком мало кода, чтобы по-настоящему понять, что вы пытаетесь достичь - так что извините, если это не применимо.Однако, исходя из того, что в данный момент находится в нем, я не думаю, что вам вообще нужно использовать 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
0 голосов
/ 12 декабря 2018

self.priceTable не является допустимым именем параметра.Параметры должны быть просто именами, и вы можете передать self.priceTable лямбда-функции в качестве аргумента:

price = next(filter(lambda priceTable: priceTable['reqId'] == reqId, self.priceTable), None)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...