从列表中调用函数会使列表变为空 [已关闭]

Calling a function from a list makes the list go empty [closed]

提问人:Adam Shohe 提问时间:11/11/2023 最后编辑:Adam Shohe 更新时间:11/11/2023 访问量:45

问:


这个问题是由错别字或无法再现的问题引起的。虽然类似的问题可能在这里是主题,但这个问题的解决方式不太可能帮助未来的读者。

11天前关闭。

我正在制作一个程序作为学校项目,我想通过允许用户在任何页面中输入特定数字来使其返回页面,使其感觉像一个网页。

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

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()][]

似乎从列表中调用函数会使列表由于某种原因变为空。您能为此提出任何解决方法吗?

Python 堆栈

评论

0赞 mkrieger1 11/11/2023
如果列表只包含一个项目,它就会使列表变为空。del currentPage[-1]
0赞 quamrana 11/11/2023
在调用函数之前进行调用。这就是函数参数在所有语言中的工作方式。你需要这样写你的行:.mainMenu()goTo()goTo(mainMenu)

答:

0赞 aazizzailani 11/11/2023 #1

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

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