Как захватить возвращаемое значение функции с условием if - PullRequest
1 голос
/ 03 мая 2019
def func1():
    if my_api_success():
        return my_api_value
    else
        return None

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

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

Ответы [ 3 ]

2 голосов
/ 03 мая 2019

Если вы используете 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(),))
0 голосов
/ 03 мая 2019

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

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

0 голосов
/ 03 мая 2019

Лучший способ сделать это - воспользоваться предложением @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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...