为什么当我把它放在函数中时这段代码停止工作?

Why does this code stop working when I put it in a function?

我才刚刚开始掌握通过函数抽象复杂内容的想法,所以我决定在 Pygame 中稍微练习一下。

所以,这段代码在这里工作得很好,pygame window 存在,你可以按 X 按钮关闭它:

#pygame initialization code and etc.

running = True

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    #code for drawing stuff out

但是假设我想创建一个函数来处理关闭 window 只是为了它:

#pygame initialization code and etc.

running = True

def handle_quit_event():
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            return False
        else:
            return True


while running:
    running = handle_quit_event()

    #code for drawing stuff out

现在它不再以同样的方式工作了,pygame window 出现了一眨眼,然后程序结束了,让我感到不安的是我对抽象东西的想法使用函数都是错误的。

[编辑]:所以在我的代码中,函数只检查列表中的第一个事件,但它仍然不能解释为什么程序在 运行 之后立即完成,因为即使它检查对于第一个事件,它仍然应该 return true by 运行 else 子句。那我错过了什么?

将功能抽象为函数是个好主意!不幸的是,您的 re-write 引入了一个错误, 可能 会导致您的游戏崩溃。没有堆栈跟踪或错误消息,很难说出游戏失败的确切原因。

关于错误:

函数 handle_quit_event 不会遍历 pygame.event.get() 中的所有事件。检查第一个事件后returnsTrueFalse

你可能更想这样写:

def handle_quit_event():
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            return False
    return True

使用 list-comprehension 和 any() 的更 pythonic 方法:

def handle_quit_event():
    return not any([event.type == pygame.QUIT for event in pygame.event.get()])

请注意需要使用 not 的翻转逻辑,因为如果 没有 QUIT 事件,您的函数当前返回 True