bugfix> python > 投稿

私のifステートメントのこの部分は find_feed 関数とそれが返す None 、ifステートメントは完了しますが、他に何かを返す場合、elseステートメントは関数を再呼び出しします。 news_feed = feedparser.parse(find_feed(user_input))

関数を2回呼び出す代わりに(完了するのに少し時間がかかるため)、1回呼び出したいのですが、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()

回答 3 件
  • Python3.8のPEP572以降、組み合わせることもできます 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()
    
    

    ここでは、2つのブランチを交換して反転することをお勧めしますが is Noneis not None そう unparsed_news_feed 対応するブランチでのみ使用されます。

  • 呼び出しの結果を保存する必要があります 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()
       
    
    

  • 後で参照できるように、戻り値を変数に格納します。ここを参照してください:

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

あなたの答え