Страницы

Поиск по вопросам

вторник, 31 декабря 2019 г.

Аналог нуль-коалесцирующего оператора в Питоне

#python #python_3x


def none_aware(val, default):
    return default if val is None else val


В библиотеке есть функция которая возвращает либо список либо None, а хочется написать

return [HtmlParser(el) for el in none_aware(content.select('...'), [])]


Вместо нескольких строк проверок.
    


Ответы

Ответ 1



Можно попробовать так: return [HtmlParser(el) for el in (content.select('...') or [])] Нужно только учитывать что у класса может быть переопределён метод __bool__, но обычно даже в тех редких случаях, когда его переопределяют, его поведение в логических выражениях остаётся в рамках интуитивно ожидаемого.

Ответ 2



Если Вы фанат однострочного кода, то вот: >>> def f(v,d=1): return d if v is None else v ... >>> f(None) 1 Средствами python можно сделать так: >>> a = lambda x: x if x else None >>> a(None) >>> a(1) 1 >>> a([i for i in range(10)]) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> А если вызвать сразу: >>> (lambda x: x if x else None)([i for i in range(10)]) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Ответ 3



[HtmlParser(el) for el in content.select('...') or []] or вернёт первое значение имеющее значение True либо последнее значение

Комментариев нет:

Отправить комментарий