这个问题并不是特定于Python的,但这是我第一次遇到它。
简单地说,我有一些由我的main
调用的函数,但是每次其中一个函数结束时我都需要调用main
函数。这里有一些代码证明了这个问题:
def main():
text = raw_input()
command(text)
def command(name):
if name == "help":
helpcmd()
else:
main()
def helpCmd():
print("This is the help command")
main()
main()
我担心过了一段时间我的过程会是这样的:
main->command->helpCmd->main->command->main->...
这会是性能问题吗?如果是的话,有什么建议吗?
答案 0 :(得分:4)
要回答您的问题,您需要了解调用堆栈。
每次调用函数时,程序都需要记住它的位置,以便 - 当被调用者返回时 - 它可以跳回调用者中的同一点。因此,它将其当前状态推送到堆栈。使用函数是最佳实践的一个重要部分(出于如此多的原因:抽象,封装,代码重用等),因此现代语言(包括Python)将框架推入堆栈是一个非常轻量级的操作。但是,它不是免费。
如果你使用一个自称为循环的函数,你最终会溢出调用堆栈。如果你需要一个程序无限循环(甚至很多次),最好的办法是使用为此目的而构建的构造:循环。
注意:请参阅chepner关于尾部调用优化的评论,这是许多语言(特别是函数式语言)编译/执行过程的一部分。
答案 1 :(得分:0)
呃......这实际上根本不是问题,因为那只是我用奇怪的方式思考。
简单地说,每当我调用main
函数时,应该用简单的return
指令替换它,以便离开函数并返回到父函数本身。现在,如果没有在无限循环中添加对main
函数的调用,那也是行不通的,例如:
while True:
main()
现在,这将迫使进程等待每个main()
周期结束以启动一个新进程,而不是每次到达结尾时都会愚蠢地调用自身。
现在,作为个人记录,请不要贬低我!我有一个糟糕的思考过程导致了一个错误,并自己纠正了它。这也是我想在这里发布我自己的“解决方案”的原因,因为这样可以保持自己的羞辱。