python - 函数结束后将值保留在变量中(导致 UnboundLocalError)
问题描述
我正在尝试创建一个虚拟餐厅菜单,单击一个按钮会分配一个与我之前创建的开胃菜和主菜列表的索引相对应的数字。我不确定如何保留 的 值,app_ix
因为没有这些值entree_ix
我无法调用该meal()
函数,按转义键将删除这些值并导致局部变量错误,其中entree_ix
和app_ix
没有值,但它们正在作为函数的参数meal()
调用。
def screen(app, ent):
mx, my = pygame.mouse.get_pos()
if app == 1:
running = True
while running:
window.fill(WHITE)
window.blit(menu, (0, 0))
app_box_one = pygame.Rect(WIDTH/3 - 100, HEIGHT/5, 400, 100)
pygame.draw.rect(window, NUTMEG, app_box_one)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
if event.type == pygame.MOUSEBUTTONDOWN:
if app_box_one.collidepoint(mx, my):
running = False
app_ix = 0
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
pygame.display.update()
main_clock.tick(60)
if ent == 1:
running = True
while running:
window.fill(WHITE)
window.blit(menu, (0, 0))
option_box_one = pygame.Rect(WIDTH/3 - 100, HEIGHT/5, 400, 100)
pygame.draw.rect(window, NUTMEG, option_box_one)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
if event.type == pygame.MOUSEBUTTONDOWN:
if option_box_one.collidepoint(mx, my):
running = False
entree_ix = 0
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
pygame.display.update()
main_clock.tick(60)
def meal(app_index, entree_index):
window.fill(WHITE)
window.blit(menu, (0, 0))
meal_font = pygame.font.SysFont('corbel', 50, True)
meal_message = app_list[app_index] + entree_list[entree_index]
final_meal_message = meal_font.render(meal_message, True, BLACK)
window.blit(final_meal_message, (WIDTH/2 - 50, HEIGHT/2 - 50))
pygame.display.update
main()
解决方案
global
您应该在函数内部声明一个变量。
def test():
global gVar
gVar = 10
# Do stuff #
test()
print(gVar)
这是多么糟糕的编程习惯,通常如果你需要这样做,你做错了其他事情。
推荐阅读
- swift - Swift:尝试访问数组中对象的值时出现错误
- cookies - 如何在 AspNet Core 中列出带有更改的 cookie
- nexus - 配置 helm 连接到 nexus
- swisscomdev - 在 Swisscom Application Cloud 上自动创建、恢复和下载 MongoDB 备份
- http - JMeter:我如何对随机 2 个浮点数求和
- laravel - npm 的新手 get SyntaxError: Unexpected token
- ios - Xcode 10 上的 iOS 模拟器崩溃
- php - WordPress CSRF 漏洞利用草案状态
- jython - 在 Jython 中使用 AND 运算符
- c# - 两组点之间的最佳匹配