<p>由于对<code>True</code>的全局查找,<code>while True</code>的速度较慢。如果使用<code>while 1</code>,while循环应该轻松地击败for repeat(至少在速度、美观和清晰度方面):</p>
<pre><code>>>> from dis import dis
>>> def f():
while True:
print
>>> dis(f)
2 0 SETUP_LOOP 11 (to 14)
>> 3 LOAD_GLOBAL 0 (True)
6 POP_JUMP_IF_FALSE 13
3 9 PRINT_NEWLINE
10 JUMP_ABSOLUTE 3
>> 13 POP_BLOCK
>> 14 LOAD_CONST 0 (None)
17 RETURN_VALUE
>>> def g():
while 1:
print
>>> dis(g)
2 0 SETUP_LOOP 4 (to 7)
3 >> 3 PRINT_NEWLINE
4 JUMP_ABSOLUTE 3
>> 7 LOAD_CONST 0 (None)
10 RETURN_VALUE
</code></pre>
<p><em>repeat</em>的主要用例是向<em>imap</em>或<em>izip</em>提供一个常量值流。例如,下面计算2的幂和:<code>sum(imap(pow, repeat(2), xrange(10)))</code>。在</p>
<p>itertool还可以用来加速不需要变量变化的for循环。例如,Guido使用这种技术来最小化<em>timeit</em>模块中的循环开销:<a href="http://hg.python.org/cpython/file/40e1be1e0707/Lib/timeit.py#l188">http://hg.python.org/cpython/file/40e1be1e0707/Lib/timeit.py#l188</a></p>
<p>为了回答你的另一个问题,“有什么理由使用while循环?”。答案是肯定的。Python的for循环实际上是一个foreach,它使用迭代器生成一个值流。相反,while循环要么是无界的(如whiletrue示例中所示),要么是在满足特定条件时终止的(例如,循环用户输入,直到用户键入“quit”或类似的东西为止)。在</p>
<p>while循环和for循环的对比功能可以在<a href="http://en.wikipedia.org/wiki/Collatz_conjecture">Collatz conjecture</a>的示例中看到,其中while循环不能很容易地替换为for循环:</p>
^{pr2}$
<p>通过对<a href="http://hg.python.org/cpython/file/40e1be1e0707/Lib">Python's standard library</a>进行greping,可以看到while循环的更多示例和用例。在</p>
<p>总之,while语句是工具箱的重要组成部分:-)</p>