我才剛剛開始掌握通過函式抽象復雜事物的想法,所以我決定在 Pygame 中練習一下。
因此,這里的代碼運行良好,pygame 視窗存在,您可以通過按 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
但是假設我想做一個函式來處理關閉視窗只是為了它:
#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 視窗出現了一會兒,然后程式結束,讓我有一種不安的感覺,我使用函式抽象東西的想法都是錯誤的。
[編輯]:所以在我的代碼中,函式只檢查串列中的第一個事件,但它仍然沒有解釋為什么程式在運行后立即完成,因為即使它檢查第一個事件,它仍然應該回傳通過運行 else 子句為真。那么我錯過了什么?
uj5u.com熱心網友回復:
將功能抽象為函式是個好主意!不幸的是,您的重寫引入了一個錯誤,可能導致您的游戲損壞。如果沒有堆疊跟蹤或錯誤訊息,很難確切地說出游戲被破壞的原因。
關于錯誤:
該函式handle_quit_event不會遍歷pygame.event.get(). 它回傳True或False檢查第一個事件之后。
你可能想寫得更像:
def handle_quit_event():
for event in pygame.event.get():
if event.type == pygame.QUIT:
return False
return True
使用串列理解的更 Pythonic 的方法和any():
def handle_quit_event():
return not any([event.type == pygame.QUIT for event in pygame.event.get()])
請注意翻轉邏輯是必需的,因為如果沒有QUIT 事件not,您的函式當前正在回傳。True
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/437417.html
下一篇:方法的junit測驗
