为什么使用while循环更好?

时间:2014-04-05 02:57:09

标签: python

我正在制作一个程序,它使用一个循环来永远运行,下面有一段代码,向您展示我如何实现循环。这只是一个例子,而不是实际的程序。这是同样的想法。

import time
def start():
    print "hello"
    time.sleep(0.2)
    start()
start()

我所有的程序员朋友都告诉我不要这样做,而是使用while循环。像这样:

import time
def start():
    while True:
        print "Hello"
        time.sleep(0.2)
start()

当两种方法完全正常工作时,为什么要使用while循环呢?

4 个答案:

答案 0 :(得分:6)

每次递归时,都会将帧上下文推送到程序堆栈中。很快你就会耗尽整个分配的堆栈空间,导致堆栈溢出,没有双关语;)

第二种方法没有这样的缺陷。因此,从它的外观来看,第二种方法比第一种方法更好(除非提出更多的方案)。

答案 1 :(得分:2)

如果您通过递归连续运行程序,您将获得RuntimeError

Traceback (most recent call last):
  File "t.py", line 8, in <module>
    start()
  File "t.py", line 7, in start
    start()
  File "t.py", line 7, in start
    start()
  ...
  File "t.py", line 7, in start
    start()
RuntimeError: maximum recursion depth exceeded

>>> import sys
>>> sys.getrecursionlimit()
1000

答案 2 :(得分:1)

while循环和递归都有它们的优点和缺点,但循环只是一个测试和条件跳转。 wheras ecursion涉及推动堆栈帧,跳跃,返回,并从堆栈弹出。所以他们可能更喜欢while循环:)

答案 3 :(得分:1)

Python没有Tail Call Optimization (TCO)并且无法忽略堆栈。因此,递归应该用于未绑定深度(在没有TCO的语言中),以免出现堆栈溢出错误!

虽然当前代码可能看起来很好,但请考虑这个简单的更改,这很快就会发现问题。

def start():
    print "hello"
    # let's go faster! -- time.sleep(0.2)
    start()
start()