这是(我假设)一个基本问题,但我似乎无法弄明白。
给出以下代码:
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.
我的问题是:为什么我可以安全地在函数之外clock
和block_list
,而不是done
?
答案 0 :(得分:3)
将完成变量移到上面的函数后,你必须明确指出解释器函数中的done
变量是全局的
done = False
def update_screen():
# Loop until the user clicks the close button.
global done
while not done:
# .......
如果您直接分配给该变量,则必须使用global
标识变量,例如a = 10
。在上面的代码段中,一切都适用于clock
和block_list
,因为在函数体内没有对该变量的直接赋值。
这是必需的,因为在函数体中已赋值的所有变量都被视为函数局部变量。
您可以通过以下网址找到更多信息: