2017-01-31 5 views
-2

Ich habe eine rekursive Funktion, simulation(), die einige Minuten aus dem Web einige Werte (die Werte sind die Ergebnisse des Zählens mehrerer Aktionen) abruft. Innerhalb der Funktion ist eine verschachtelte Funktion, raise_alarm, ebenfalls rekursiv, die die Werte von simulation() als Argumente verwendet und analysiert. Ich muss in der Lage sein zu erkennen, ob sich nach jedem Lauf eine Wertänderung ergeben hat.Python: Rekursive Funktion und Speichern von Variablen

Ich habe davon Abstand genommen, globale Variablen zu verwenden (weiß nicht wirklich viel über sie), während ich weiter lese, sie sollten der letzte Ausweg sein. Gibt es irgendeine Möglichkeit, einen Wert innerhalb oder außerhalb der verschachtelten Funktion zu speichern, um ihn mit seinem aktualisierten Status vergleichen zu können, sobald er angekommen ist?

Hier ist der vereinfachte Code:

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

So ausführlich, value_a, _b ... werden die Bahn kontinuierlich abgeschabt. Jedes Mal, wenn value_b im Durchschnitt drei Mal gewachsen ist, wächst value_b ebenfalls um 1. Ich brauche eine Variable innerhalb meiner raise_alarm-Funktion, die value_a spiegelt, aber jedes Mal, wenn sich value_b ändert, auf 0 zurückgesetzt wird. Dazu möchte ich value_a in der Speichervariablen value_a_old speichern, damit ich den neuen eingehenden Wert mit dem Wert a vergleichen kann. Sowohl value_a als auch value_a_old müssen während des Kurses aktualisiert werden.

Hoffnung, wissen Sie, was ich rede, ich habe den ganzen Tag auf sie gestarrt ...

Prost, Jungs!

+0

Ich denke, der beste Weg, dies zu tun ist, die Variablen, die Sie benötigen, z. 'value_a_old', als Parameter für' raise_alarm() '. –

+0

'Simulation' scheint nicht rekursiv zu sein; tatsächlich, auch nicht 'raise_alarm'. –

+1

Wo genau wiederholt sich der Ausführungsfluss? – ospahiu

Antwort

0

Vielleicht packen Sie sowohl simulation() als auch raise_alarm() innerhalb einer Klasse und verwenden Sie Objektparameter? Dies würde einen schönen, gemeinsamen Bereich für die Werte bieten, die Sie teilen möchten.

+0

Ok, ich weiß nicht viel über die Arbeit mit Klassen, abgesehen davon, wie man eine erstellt. simulation() ist nur eine -> Simulation einer Web-Scraping-Funktion, nicht sicher, ob das in einer Klasse sein sollte. Ich bin ziemlich neu in all dem. Ich werde in Klassen schauen. Vielen Dank! – user2822564

+0

Ich weiß nicht, wie man Klassen für diesen Zweck verwendet. Ich schätze, ich werde in globale Variablen schauen. – user2822564

+0

Ich habe jetzt mehrere Klassen erstellt, aber ich habe Probleme, sie durch meine Web-Scraping-Funktion interagieren und Instanzen erstellen zu lassen. Kannst du irgendeine Seite/Kurs/Quelle empfehlen, wo ich mehr über die Verwendung von Klassen für OOP lesen kann? Alles, was ich finden kann, ist entweder zu einfach und hört auf, nachdem ich erklärt habe, wie man eine Klasse und Instanz erstellt, oder es ist zu technisch für meine Erfahrung. – user2822564