Avec cette question, je remets en question toute la syntaxe et peut-être que ce n'est pas possible mais on y va :)
Je lance une fenêtre pygame. Maintenant, j'ai beaucoup de code dans cette boucle while pygame. Par conséquent, je veux créer des fonctions.
Cependant, le code que je souhaite créer en tant que fonction contient des instructions continue et break . Si je veux retourner break ou continuer à partir d'une fonction statique, il est évidemment dit "U stupid? Continue / Break est en dehors d'une boucle"
Ma question principale ici: comment concevriez-vous / résoudriez-vous cela d'une meilleure manière?
Voici à quoi ressemble mon code (plus ou moins):
pygame.init() while True: for event in pygame.event.get(): if event.type == KEYDOWN: pyEvents(event) ... # ridiculously long code # My dream function result = myFunction(camera, master) if result == break: break elif result == continue: continue def myFunction(camera, master): (grabbed, frame0) = camera.read() if not grabbed: return break # Error: outside a loop frame1 = cv2.cvtColor(frame0, cv2.COLOR_BGR2GRAY) frame2 = cv2.GaussianBlur(frame1, gaussianBlurKSize, 0) if master is None: master = frame2 return continue, master # Error: outside a loop return frame2
C'est ce que je veux atteindre:
pygame.init() while True: for event in pygame.event.get(): if event.type == KEYDOWN: pyEvents(event) ... # ridiculously long code # A small example code snippet that I need as a function (grabbed, frame0) = camera.read() if not grabbed: # End of feed break frame1 = cv2.cvtColor(frame0, cv2.COLOR_BGR2GRAY) frame2 = cv2.GaussianBlur(frame1, gaussianBlurKSize, 0) if master is None: master = frame2 continue
3 Réponses :
Vous pouvez lever une exception dans la fonction. Dans votre boucle, vous pouvez utiliser une construction try-except. Peut-être que ce lien est utile: https://realpython.com/python-exceptions/
il suffit de créer une variable booléenne globale
:
def myFunction(): global running if you want to break the loop: running = False
et si vous voulez rompre la boucle, définissez running
sur False
:
running = True while running: # your code goes here
Et quelque chose comme ça?
pygame.init() while True: for event in pygame.event.get(): if event.type == KEYDOWN: pyEvents(event) ... # ridiculously long code # My dream function frame2, master, result = myFunction(camera, master) if result == 'break': break elif result == 'continue': continue def myFunction(camera, master): (grabbed, frame0) = camera.read() result = None if not grabbed: return None, None, 'break' frame1 = cv2.cvtColor(frame0, cv2.COLOR_BGR2GRAY) frame2 = cv2.GaussianBlur(frame1, gaussianBlurKSize, 0) if master is None: master = frame2 return frame2, master, 'continue' return frame2, master, result
Vous pouvez renvoyer des entiers comme 1-break, 2-continue, etc. Vous pouvez renvoyer des chaînes comme "break" puis vérifier la réponse.
tu as raison. semble assez facile