python условие до выписки - PullRequest
0 голосов
/ 14 апреля 2020

В Go можно использовать условные выражения до операторов l ie this:

if num := 9; num < 0 

Я бы хотел сделать то же самое в python. Я создаю функцию, которая возвращает статус результата и фактический результат, если он был успешным, например:

def myfunc:
  val = 0
  if val > 0:
    return [ True, val ]
  else:
    return [ False, val ]

Поэтому я хочу использовать его так:

if res, val = myfunc() TEST FOR res:
  do_something()

Ответы [ 3 ]

1 голос
/ 14 апреля 2020

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

Мы присваиваем вывод кортежу out и проверяем, является ли его первый элемент True:

def myfunc(val):
  if val > 0:
    return [ True, val ]
  else:
    return [ False, val ]

if (out := myfunc(5))[0]:
    print(out)
else:
    print('That was False')
# [True, 5]


if (out := myfunc(-2))[0]:
    print(out)
else:
    print('That was False')
# That was False

К сожалению, мы не можем распаковать кортеж на лету:

if ((res, val) := myfunc(-2))[0]:
    print(val)
else:
    print('That was False')

     File "<ipython-input-10-03724761d41a>", line 20
    if ((res, val) := myfunc(-2))[0]:
        ^
SyntaxError: cannot use named assignment with tuple
0 голосов
/ 21 апреля 2020

Так что, кажется, это невозможно. Я хотел назначить и протестировать одно и то же утверждение, как можно сделать в Go.

. Закрытие.

0 голосов
/ 14 апреля 2020

Это невозможно в python. Просто поместите его в две строки, например

res, val = myfunc()
if res:
    do_something()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...