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