微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在函数结束后将值保留在变量中导致 UnboundLocalError

如何解决在函数结束后将值保留在变量中导致 UnboundLocalError

我正在尝试创建一个虚拟餐厅菜单,单击按钮会分配一个数字,该数字对应于我之前创建的开胃菜和主菜列表的索引。我不确定如何保留 app_ixentree_ix 的值,因为我无法在没有这些值的情况下调用 meal() 函数,按转义键将删除这些值并导致局部变量entree_ixapp_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))
            option_Box_one = pygame.Rect(WIDTH/3 - 100,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))
    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)

无论如何这是不好的编程习惯,通常如果你需要这样做,你就做错了其他事情。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。