Как я могу вызвать функцию, используя оператор if, а затем распечатать значение, возвращаемое внутри оператора if?

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

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

Вопрос:

Эта часть моего оператора if вызывает find_feed функцию, и она возвращает None , оператор if завершается, однако, если он возвращает что-либо еще, оператор else повторно вызывает функцию: news_feed = feedparser.parse(find_feed(user_input))

Вместо того, чтобы вызывать функцию дважды (потому что для ее завершения требуется немного времени), я хотел бы вызвать ее один раз, и если она не возвращает None, используйте возвращаемое значение в операторе else вместо повторного вызова функции. Могу ли я это сделать, и если да, то как?

     elif find_feed(user_input) is None:
        print("No location found.")
    else:
        print("Pulling weather data from Environment Canada.")
        news_feed = feedparser.parse(find_feed(user_input))
        brief_current()
        more_question = input("n"   "Would you like more details? (y or n) ")
        if more_question == "y":
            detailed_current()
 

Ответ №1:

Начиная с PEP 572 в Python 3.8, вы также можете комбинировать if оператор с присваиванием, поэтому вам не нужно создавать переменную заранее:

     elif (unparsed_news_feed := find_feed(user_input)) is None:
        print("No location found.")
    else:
        print("Pulling weather data from Environment Canada.")
        news_feed = feedparser.parse(unparsed_news_feed)
        brief_current()
        more_question = input("n"   "Would you like more details? (y or n) ")
        if more_question == "y":
            detailed_current()
 

Хотя здесь я бы предложил поменять местами две ветви и инвертировать is None значение is not None so unparsed_news_feed , оно используется только в соответствующей ветви.

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

1. Спасибо, я не знал об := этом. В части ветвей вашего ответа вы говорите, что else оператор должен быть print("No location found.") и elif должен содержать текущий else код, но is Not None вместо этого. Я правильно понимаю? Извините, если это сбивает с толку, я новичок в SO и Python.

2. @aidenmitchell Точно.

Ответ №2:

Сохраните возвращаемое значение в переменной, чтобы вы могли ссылаться на него позже. Смотрите здесь:

 xy = find_feed(x)

# Assumes a pre existing if statement

elif xy is None:
    print('no location')
else:
    print("Pulling weather data from Environment Canada.")
    news_feed = feedparser.parse(xy)
    brief_current()
    more_question = input("n"   "Would you like more details? (y or n) ")
    if more_question == "y":
        detailed_current()
 

Ответ №3:

Вам нужно сохранить результат вызова find_feed , прежде чем проверять его значение:

 else: # instead of the original elif find_feed(user_input) is None:
    result = find_feed(user_input)
    if result is None:
        print("No location found.")
    else:
        print("Pulling weather data from Environment Canada.")
        news_feed = feedparser.parse(result)
        brief_current()
        more_question = input("n"   "Would you like more details? (y or n) ")
        if more_question == "y":
            detailed_current()