Python: как вернуть два значения из функции, которая вызывается из elif?

#python-3.x #function #if-statement

#python-3.x #функция #if-оператор

Вопрос:

elif someother_function(): Здесь проверяется, верно ли это, а также необходимо распечатать возвращаемое значение. Кто-нибудь может мне помочь с этим?

 def some_function():
     if correct:
         return True
     else:
         return False

def someother_function():
     if correct:
         return True,f
     else:
         return False,None


if some_function():
     print("something")
elif someother_function():
     print(f)
else:
     print("nothing")
 

Здесь, как вернуть f из someother_function туда, где он вызывается в elif?

Ответ №1:

Вы можете попробовать:

 def some_function(correct):
   if correct:
       return False
   else:
       return False

def someother_function():
    if correct:
       return True, f
else:
    return False, None

if some_function():
    print("something")
elif [x := someother_function()] and x[0]:
    print(x[1])
else:
    print("nothing")
 

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

1. Да, это помогает. Но я не могу вызвать some_other_function перед проверкой some_function() в моей исходной программе.

2. я искал что-то вроде, elif true_or_false in (true_orfalse,f=someother_function()) .

3. @ImageSchnell Или вы можете попробовать x := someother_function(True) , пожалуйста, взгляните на мой последний отредактированный

4. раньше не видел эту кодировку, позвольте мне попробовать.

5. Извините, я не понимаю, что вы сделали.

Ответ №2:

Если вы хотите, вы можете написать класс со своими функциями и установить переменную класса с вашим выводом:

 import random

class foo:
    
    def __init__(self):
        self.f=None
        
    def some_function(self):
        correct= random.choice([True, False])
        if correct:
            return True
        else:
            return False

    def someother_function(self):
        self.f = "something 2"
        correct= random.choice([True, False])
        if correct:
            return True,
        else:
            return False,None

if __name__=="__main__":
    temp = foo()
    if temp.some_function():
         print("something")
    elif temp.someother_function():
         print(temp.f)
    else:
         print("nothing")
 

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

1. Спасибо, @Mazziotti, я искал более простые способы, думаю, я должен привлечь к этому свой класс. Я думаю, нет способа вернуть два значения в elif напрямую.

2. Возможно, решение проще, чем мы думаем

Ответ №3:

Я думаю, вам нужно указать какое-то событие. Проверьте этот код и попробуйте, если хотите:

 import random

event = random.choice([True, False])

def some_function(correct):
     if correct:
         return True
     else:
         return False

def someother_function(correct):
     if correct:
         return True, f
     else:
         return False, None


if event == True:
    some_function()
    print("something")
elif event == False:
    someother_function():
    print(f)
else:
    print("nothing")
 

Ответ №4:

Возможно, это не совсем то, что вы хотите, но вы можете превратить свою функцию в генератор.

 def some_function():
    return correct

def someother_function():
     if correct:
         yield True
         yield "A"
     else:
         yield False
         yield None
someother_function_gen = someother_function()


if some_function():
     print("something")
elif next(someother_function_gen):
     print(next(someother_function_gen))
else:
     print("nothing")
 

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

1. не удается вызвать someother_function_gen = someother_function() перед проверкой if some_function() .