while True only works slower due to the global True search. If you use while 1 instead, then the while-loop should easily beat for-repeat (at least in terms of speed, beauty, and clarity):
>>> 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
The main use case for repetition is to provide a constant value stream for imap or izip. For example, the following calculates the sum of two degrees: sum(imap(pow, repeat(2), xrange(10))) .
Repeating itertool can also be used to speed up a for loop that does not need a variable variable. For example, Guido used this method to minimize cycle overhead in the timeit module: http://hg.python.org/cpython/file/40e1be1e0707/Lib/timeit.py#l188
To answer your other question, "is there any reason to use a while loop". The answer is yes. Python for-loop is indeed a foreach that consumes iterators to create a stream of values. In contrast, the while-loop is either unlimited (as in the while-True example), or ends when a specific condition is satisfied (for example, looping through user inputs until the user types βquitβ or somesuch).
The contrasting capabilities of while-loops and for-loops can be seen in the Collatz hypothesis example, where the while loop cannot be easily replaced with for for -loop:
def collatz(n): print n while n > 1: n = n // 2 if n % 2 == 0 else n * 3 + 1 print n
Many other examples and use cases for while-loops can be seen with grepping over the Python standard library .
In conclusion, the while statement is an important part of your toolkit :-)
source share