Как создать лямбду, которая поднимается, если ее вход не является пустым списком? - PullRequest
0 голосов
/ 30 марта 2020

Я хотел бы создать лямбду, которая выдает ValueError, если ее входные данные являются непустым списком. Основываясь на предложенном ответе здесь , я реализовал его следующим образом:

f = lambda x: (_ for _ in ()).throw(ValueError()) if len(x) != 0 else []

(Обратите внимание, что возвращаемое значение [], когда x представляет собой пустой список, здесь не важно, Мне просто нужно было что-то поместить, чтобы получить полный оператор if - else.

Это работает, как задумано, но код выглядит немного крипт c. Есть ли лучший способ написать выше? Я думаю об использовании x как-то в генераторе (_ for _ in ()), но не могу однозначно понять, как это сделать, чтобы получить желаемый результат.

1 Ответ

0 голосов
/ 30 марта 2020

Правильное решение (упомянутое в сообщении, на которое вы ссылаетесь - все WTF) очень просто и довольно очевидно: не используйте лямбду. «Лямбды» - это просто синтактический c сахар для правильных определений функций (они являются функциями, точка), используемый, когда вам нужен только очень простой однократный обратный вызов. Вы можете передать правильную функцию (или просто любую вызываемую функцию) везде, где вы используете лямбду. То, что вы хотите, это:

def check_non_empty(lst):
    if not lst:
        raise ValueError("list should not be empty")
    return lst
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...