如何使定义工作?

How to make definiton work?

请看下面的例子:

import pygame
pygame.init()
x = 800
y = 600
programDisplay = pygame.display.set_mode((x,y))
pygame.display.set_caption('Title')
pygame.display.update()
programExit = False  
while not programExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            programExit = True
pygame.quit()
quit()

第二个例子:

import pygame
pygame.init()
x = 800
y = 600
programDisplay = pygame.display.set_mode((x,y))
pygame.display.set_caption('Title')
pygame.display.update()
programExit = False
def programQuit():
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            programExit = True
while not programExit:
    programQuit()
pygame.quit()
quit()

如何使第二个示例的定义有效,以便结果与第一个示例中的相同? 认为这可能与全局和局部变量有关但无法使其正常工作。

这里,我修复了它

import pygame
pygame.init()
x = 800
y = 600
programDisplay = pygame.display.set_mode((x,y))
pygame.display.set_caption('Title')
pygame.display.update()
programExit = False

def checkForProgramQuit():
    global programExit
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            programExit = True



while not programExit:
    checkForProgramQuit()
    programDisplay.fill((255,255,255))
    pygame.display.update()

pygame.quit()
quit()

您正在修改的 programExit 变量是函数的局部变量。

Carcigenticate 非常正确,但这里有一些关于这里发生的事情的注释以及一些将在未来避免这种情况的做法。

programExit = False
def programQuit(programExit=False):
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            programExit = True   # Issue 1

while not programExit:
    programQuit()

问题 1 是此赋值在函数范围内创建一个新变量并设置它的值。它没有改变模块级变量 programExit 的值。

更好的方法是让函数将其结果作为 return 值传回,如下所示。

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

while programContinue():
    pass

另外,通过反转函数编辑的布尔逻辑 return,我认为事情变得更清楚了,我们可以去掉 'not'。同样以这种方式表达 while 子句对我来说似乎更清楚一些。 'pass' 语句可以有用地替换为一些日志记录或来自 C._ 的答案的显示更新。