Seite 1 von 1

Variable in Endlosschleife nur einmal aufrufen

Verfasst: Mittwoch 2. November 2016, 10:35
von Online
Hallo,
hier mal eine super simple Frage für euch. Kann man in Python eine Variable deklarieren, die nicht bei jedem Schleifenaufruf verändert wird ?

Also die Variable "variableNichtVeraendert" soll hochzählen und nicht immer bei Null anfangen. Wohingegen "eineAndereVariable" immer bei Sechs festhängen soll. Ich hoffe die Frage ist nicht zu simple und jemand kann mir helfen. (Google hat bislang nicht geholfen, aber wenn jemand eine Webseite mit Erklärung hat, dann immer hier damit). Bei Codeteile müssen in zwei unterschiedlichen "Dokumenten" stehen.

Code: Alles auswählen

import numpy as np
import cv2
import time
from new_2 import Test

class Main(object):
	variableNichtVeraendert = 0
	
	while(1):
		eineAndereVariable = 5
		test = Test()
		test.neuesDokument(eineAndereVariable, variableNichtVeraendert)
		
		if cv2.waitKey(1) & 0xFF == ord('q') or variableNichtVeraendert == 5:
			break
	cv2.destroyAllWindows()

Code: Alles auswählen

import numpy as np
import cv2
import time


class Test(object):
	
	def neuesDokument(self, eineAndereVariable, variableNichtVeraendert):
			variableNichtVeraendert += 1
			eineAndereVariable += 1
			time.sleep(2)
			print variableNichtVeraendert, eineAndereVariable

Re: Variable in Endlosschleife nur einmal aufrufen

Verfasst: Mittwoch 2. November 2016, 11:11
von Sirius3
@Online: ausführbarer Code auf class-Definitions-Level ist definitiv falsch. while ist keine Funktion, sollte also nicht so geschrieben werden. In diesem Fall wäre wohl eine for-Schleife besser. Eingerückt wird immer mit 4 Leerzeichen pro Ebene.

Wenn Du eine Variable verändern willst, dann verändere sie halt und wenn sie gleich bleiben soll, dann ändere sie halt nicht. Bevor Du mit Klassen anfängst, solltest Du zuerst Funktionen beherrschen. Dazu gehört, dass Werte eine Funktion als Parameter betreten und als Rückgabewert verlassen, also, alles was sich verändern soll, mußt Du wieder zurückgeben.

Code: Alles auswählen

def create_new_document(some_variable, some_other_variable):
    some_other_variable+= 1
    some_variable+= 1
    time.sleep(2)
    print some_other_variable, some_variable
    return some_other_variable

def main():
    some_variable = 5
    some_other_variable= 0
    while True:
        some_other_variable = create_new_document(some_variable , some_other_variable)
        if cv2.waitKey(1) & 0xFF == ord('q') or some_other_variable == 5:
            break

Re: Variable in Endlosschleife nur einmal aufrufen

Verfasst: Mittwoch 2. November 2016, 20:38
von Online
Hallo und danke schonmal dafür. Mit deinen Kritikpunkten im ersten Absatz hast du sicherlich recht, nun will ich aber auch anfangen zu programmieren, selbst wenn Fehler dabei sind. Das ist natürlich auch nur ein Beispielcode, damit das hier im Forum nicht zu lang wird. Vielleicht ist das nicht richtig rüber gekommen.

Ich würde gerne über mehrere Klassen einen Variablewert beibehalten und anschließend wieder iterieren. Das sollte mein Code aussagen. Mit "return" habe ich es schon probiert, es hat aber leider nicht geklappt. Also gibt es zu diesem schicken Satz:
Sirius3 hat geschrieben: Wenn Du eine Variable verändern willst, dann verändere sie halt und wenn sie gleich bleiben soll, dann ändere sie halt nicht. [/code]
auch eine Pythonlösung auf mein Problem ?

Re: Variable in Endlosschleife nur einmal aufrufen

Verfasst: Mittwoch 2. November 2016, 20:41
von Sirius3
@Online: ein Beispielcode sollte das eigentliche Problem zeigen. So wie es jetzt dasteht macht das einfach keinen Sinn. Eine Variable über mehrere Klassen zu verändern, scheint mir ein falscher Designansatz. Beschreib doch einfach mal, was Du machen willst.