为什么当我把它放在函数中时这段代码停止工作?
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()
中的所有事件。检查第一个事件后returnsTrue
或False
你可能更想这样写:
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
。
我才刚刚开始掌握通过函数抽象复杂内容的想法,所以我决定在 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()
中的所有事件。检查第一个事件后returnsTrue
或False
你可能更想这样写:
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
。