PyGame局部变量

时间:2016-03-15 03:04:45

标签: python pygame

这是(我假设)一个基本问题,但我似乎无法弄明白。

给出以下代码:

from src.Globals import *
import pygame
# Used to manage how fast the screen updates
clock = pygame.time.Clock()
# This is a list of 'sprites.'
block_list = pygame.sprite.Group()

def update_screen():
    # Loop until the user clicks the close button.
    done = False
    while not done:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True

        # Clear the screen
        screen.fill(WHITE)

        for i in blocks:
            block_list.add(block)

        block_list.draw(screen)

        # Limit to 20 frames per second
        clock.tick(20)

        # Update the screen with what we've drawn.
        pygame.display.flip()

    pygame.quit()

一切正常。我可以在一个线程中调用函数update_screen并让它正常工作。但是,如果我将done = False移到函数声明之上,那么我会收到错误:UnboundLocalError: local variable 'done' referenced before assignment.

我的问题是:为什么我可以安全地在函数之外clockblock_list,而不是done

1 个答案:

答案 0 :(得分:3)

将完成变量移到上面的函数后,你必须明确指出解释器函数中的done变量是全局的

done = False
def update_screen():
    # Loop until the user clicks the close button.
    global done
    while not done:
    # .......

如果您直接分配给该变量,则必须使用global标识变量,例如a = 10。在上面的代码段中,一切都适用于clockblock_list,因为在函数体内没有对该变量的直接赋值。

这是必需的,因为在函数体中已赋值的所有变量都被视为函数局部变量。

您可以通过以下网址找到更多信息: