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