如何让定义工作?

时间:2017-02-20 15:14:12

标签: python pygame global-variables definition

请参阅以下示例:

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()

如何从第二个例子开始定义,结果与第一个例子相同? 认为它可能与全局和局部变量有关,但无法使其正常工作。

2 个答案:

答案 0 :(得分:0)

在这里,我修好了

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变量是函数的本地变量。

答案 1 :(得分:0)

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的值。

更好的方法是让函数将结果传回作为这样的返回值。

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

while programContinue():
    pass

同样通过反转函数返回的布尔逻辑,我认为事情变得更清晰了,我们可以摆脱'不'。同样用这种方式表达while子句对我来说似乎有点清楚。 'pass'语句可以用一些日志记录或C。的答案中的显示更新来替换。