gpt4 book ai didi

python - PyGame 局部变量

转载 作者:行者123 更新时间:2023-11-28 16:26:47 28 4
gpt4 key购买 nike

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

给定以下代码:

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

最佳答案

将 done 变量移动到函数上方后,您必须明确指出解释器函数中的 done 变量是全局的

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

您必须使用 global 来标识变量,以防您直接赋值给该变量,例如 a = 10。在上面的代码片段中,clockblock_list 一切正常,因为在函数体内没有直接赋值给该变量。

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

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

关于python - PyGame 局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36001951/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com