代码之家  ›  专栏  ›  技术社区  ›  Adam Shohe

从列表中调用函数会使列表变空

  •  -2
  • Adam Shohe  · 技术社区  · 2 年前

    我正在把一个程序作为一个学校项目,我想让它感觉像一个网页,允许用户在任何一个页面上输入一个特定的数字,让它回到一个页面。

    我使用堆栈实现了它(我不确定它是否重要,但我没有为它设置元素的最大限制,因为设置一个元素限制没有意义)。以下是我想要重点关注的代码的一小部分:

    currentPage=[] #page stack
    
    def goTo(page):
        currentPage.append(page)
    
    def goBack(): #redundant for now
        global currentPage
        print(currentPage)
        del currentPage[-1]
    
    def mainMenu():
        print("1. Order item\n2. Admin login\n3. Quit\n")
        global currentPage
        print(currentPage) #14
        choice=int(input("Please enter your choice: "))
        if choice==1:
            goTo(order())
        elif choice==2:
            goTo(adminMenu())
        elif choice==3:
            goBack()
    
    goTo(mainMenu())
    while True:
        if len(currentPage)==0:
            print("Thank you for using our program! <3")
            break
        currentPage[-1]()
    

    [编辑]:我希望第14行的打印 [mainMenu()] 但它打印 [] 相反

    似乎由于某种原因,从列表中调用函数会使列表变为空。你能建议一些解决办法吗?

    1 回复  |  直到 2 年前
        1
  •  0
  •   aazizzailani    2 年前

    要解决此问题,请在将函数添加到 currentPage 列表而不是 goTo(mainMenu()) 使用 goTo(mainMenu) 以存储函数本身。这样可以防止列表由于函数执行而变为空。

    通过在中存储函数而不执行它们 goTo 函数,您可以在不遇到空列表问题的情况下维护该功能。