2017-01-31 3 views
-2

私は再帰関数simulate()を使用して、毎分Webからいくつかの値(いくつかのアクションを数えた結果の値)を取り出します。この関数の内部には、引数としての()の値を使用して解析する入れ子関数raise_alarm(再帰的)もあります。それぞれの実行後に価値の変化があったかどうかを検出できる必要があります。Python:再帰関数と変数の保存

私が読んでいるように、グローバル変数の使用を控えています。だから、それが到着したら、それを更新状態と比較できるように、ネストされた関数の内部または外部に値を格納できる方法はありますか?ここで

は単純化されたコードです:

def simulation(): 
     #generates the values_a, _b... 
     def raise_alarm(value_a, value_b,...): 
      if value_a_old < value_a: ###where do I place value_a_old?) 
       #do stuff 
      else: pass   
      if value_b_alt < value_b: 
       #do stuff 
      else: pass    
      if value_a > value_b+2 or value_b > value_a+2: 
       #do stuff 
      else: 
       #do other stuff 
     while True: 
      print' stuff ' 
      time.sleep(2) 
      raise_alarm(value_a, value_b) 
    simulation() 

ので、詳細、value_a、_bで...連続ウェブを掻き取られています。 value_bが平均で3倍になるたびに、value_bも1増加します。私はraise_alarm-function内でvalue_aをミラーリングする変数が必要ですが、value_bが変更されるたびに0に戻されます。 これは私がストレージ変数value_a_oldにvalue_aを保存したいので、新しい着信value_aとvalue_a_oldを比較できます。 value_aとvalue_a_oldの両方がコース中に更新される必要があります。

希望、あなたは私がみんな、私は...一日中、それに

乾杯を見つめてきた、について話しているか知っています!

+0

私はこれを行うための最良の方法は、あなたが必要とする変数を渡すことだと思います。 'value_a_old'を' raise_alarm() 'のパラメータとして返します。 –

+0

'シミュレーション 'は再帰的ではありません。実際には、 'raise_alarm'もどちらもしません。 –

+1

正確に実行フローが再帰していますか? – ospahiu

答えて

0

おそらく、クラス内にsimulation()とraise_alarm()を両方ともパックして、オブジェクトパラメータを使用しますか?これは、共有したい値のためのすばらしい共有範囲を提供します。

+0

私は、クラスを作成する方法を別にして、クラスを扱うことについてはあまり知らないです。 simulation()は、Webスクレイピング関数のシミュレーションです。クラス内にあるかどうかはわかりません。私はこのすべてにかなり新しいです。私はクラスを調べます。ありがとう! – user2822564

+0

私は、その目的のためにクラスを使用する方法を知りません。私は、グローバル変数を調べると思います。 – user2822564

+0

私は今、いくつかのクラスを作成しましたが、私はそれらを相互作用させ、Webスクレイピング機能を使用してインスタンスを作成する際に問題を抱えています。 OOPのクラスの使用についてもっと読むことができるページ/コース/ソースをお勧めしますか?私が見つけることができるのはあまりにも基本的なものであり、クラスとインスタンスの作成方法を説明した後に停止するか、自分のレベルの経験ではあまりにも技術的です。 – user2822564