Python: использование функции, которая возвращает два элемента в операторе If, без выполнения дважды

#python #function #if-statement

#python #функция #if-statement

Вопрос:

У меня есть функция, которую я использую для тестирования в if / then.

Проблема в том, что я выполняю функцию КАК в условном выражении if, так и снова после оператора if, потому что функция возвращает два элемента.

Это просто кажется расточительным, и я пытаюсь придумать способы улучшить это. Вот действительно базовая версия того, чего я пытаюсь избежать: возвращается «True», чтобы разрешить выполнение условия, но затем снова выполняется «coolstuff ()», чтобы получить больше информации из функции.

«coolstuff()» может вернуть false, поэтому я не могу использовать возвращаемую строку «stuff» в качестве теста.

 def coolstuff():
    return True, "stuff"
    
if coolstuff()[0]:
    coolthing = coolstuff()[1]
    print coolthing
 

Должен быть лучший способ сделать это, нет? Мой мозг немного тает, когда я пытаюсь его хэшировать.

Я в основном хочу сделать что-то вроде этого (недопустимого) синтаксиса:

 def coolstuff():
    return True, "stuff"
    
if a, b == coolstuff() and a:
    print b
 

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

1. val = coolstuff(); if val[0]:

2. Не могли бы вы просто вернуть None, если вывод coolstuff() недействителен, и проверить, является ли ваш возврат None?

Ответ №1:

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

 a, b = fn()
if a:
    # work with b
 

Ответ №2:

 def coolstuff():
    if valid:
        return "stuff"
    return None

data = coolstuff()
if data:
    print(data)
 

Ответ №3:

Вызовите функцию и запишите все возвращаемое значение:

 x = coolstuff()
 

Теперь у вас есть доступ к обеим частям возвращаемого значения, в x[0] и x[1] .

Ответ №4:

Сохраните его:

 state, coolvar = coolstuff()
if state:
   do_whatever(coolvar)
 

Ответ №5:

Если в более новом Python вы можете использовать страшный walrus (но я предпочитаю подход ti7, заключающийся в простом назначении в отдельной строке):

 if (x := coolstuff())[0]:
    print(x[1])