Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用语法:从函数返回break和continue语句?_Python_Pygame - Fatal编程技术网

Python 如何使用语法:从函数返回break和continue语句?

Python 如何使用语法:从函数返回break和continue语句?,python,pygame,Python,Pygame,有了这个问题,我对整个语法提出了质疑,也许这是不可能的,但我们来看看: 我正在运行一个pygame窗口。现在我在这个pygame while循环中有很多代码。因此,我想创建一些函数 但是,我想要创建为函数的代码包含continue和break语句。如果我想从静态函数返回break或continue,很明显它会说U愚蠢?继续/中断在循环之外 我这里的主要问题是:您将如何以更好的方式设计/解决此问题 这就是我的代码大致的样子: pygame.init() while

有了这个问题,我对整个语法提出了质疑,也许这是不可能的,但我们来看看:

我正在运行一个pygame窗口。现在我在这个pygame while循环中有很多代码。因此,我想创建一些函数

但是,我想要创建为函数的代码包含continue和break语句。如果我想从静态函数返回break或continue,很明显它会说U愚蠢?继续/中断在循环之外

我这里的主要问题是:您将如何以更好的方式设计/解决此问题

这就是我的代码大致的样子:

        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

您可以在函数中引发异常。在循环中,可以使用try-except构造。也许这个链接有帮助:
您可以在函数中引发异常。在循环中,可以使用try-except构造。也许这个链接有帮助:

只需创建一个全局布尔变量:

running = True
while running:
    # your code goes here
如果要中断循环,请将running设置为False:

只需创建一个全局布尔变量:

running = True
while running:
    # your code goes here
如果要中断循环,请将running设置为False:


像这样的怎么样

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

像这样的怎么样

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-break、2-continue等。您可以返回字符串,如break,然后检查响应。您是对的。看起来很简单。你可以返回整数,比如1-break,2-continue等。你可以返回字符串,比如break,然后检查响应。你是对的。看起来很容易