Как синтаксис: возвращать операторы break и continue из функции? - PullRequest
1 голос
/ 06 апреля 2020

Этим вопросом я подвергаю сомнению весь синтаксис и, возможно, это невозможно, но здесь мы go:)

У меня запущено окно пигмеев. Теперь у меня много кода в этой игре, в то время как l oop. Поэтому я хочу создать несколько функций.

Однако код, который я хочу создать как функцию, содержит операторы continue и break . Если я хочу вернуть разрыв или продолжить из функции c, очевидно, что там написано "U глупый? Продолжить / перерыв за пределами al oop"

Мой главный вопрос здесь: Как бы вы спроектировать / решить это лучше?

Вот так (более или менее) выглядит мой код:

        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

Вот чего я хочу достичь:

        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

Ответы [ 3 ]

3 голосов
/ 06 апреля 2020

просто создайте логическую переменную global:

running = True
while running:
    # your code goes here

, и если вы хотите разбить l oop, установите running на False:

def myFunction():
    global running
    if you want to break the loop:
        running = False
1 голос
/ 06 апреля 2020

Как насчет этого?

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
1 голос
/ 06 апреля 2020

Вы можете вызвать исключение в функции. В вашем l oop вы можете использовать конструкцию try-кроме. Может быть, эта ссылка полезна: https://realpython.com/python-exceptions/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...