def func1():
    if my_api_success():
        return my_api_value
    else
        return None

x= 1 if func1() is None else func1()

Я хочу получить возвращаемое значение func1(). Можно ли написать однострочный код без вызова func1() дважды?

1
chandu Ch 3 Май 2019 в 00:10

3 ответа

Лучший ответ

Если вы используете Python 3.8, вы можете использовать выражение присваивания:

x = 1 if (value := func1()) is None else value

Если вы используете более раннюю версию Python, вы можете использовать функцию next с выражением генератора, которое перебирает 1-кортеж func1(), чтобы достичь того же эффекта выражения присваивания:

x = next(1 if value is None else value for value in (func1(),))
2
blhsing 2 Май 2019 в 21:35

Лучший способ сделать это - использовать то, что предложил @CharlieWindolf, а именно:

x = func1() or 1

Проблема в том, что для возврата значения func1() требуется, что python рассматривает как логическое значение.

Чтобы это исправить, вам нужно использовать две строки.

y = func1()
x = 1 if y is None else y

В Python3.8 это может быть возможно с помощью выражения назначения, но у меня есть еще не проверял.

x = 1 if (y := func1()) is None else y
0
K-Log 2 Май 2019 в 21:38

Почему бы просто не вернуть значение, если вы пытаетесь проверить условие в случае Нет.

Или вы могли бы просто: X = func1 ()
если X не равен X = 1

0
sajak upadhyaya 2 Май 2019 в 21:40