#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])