Is there any case in python when using a while loop would be best practice?

I am benchmarking in python and I found that repeat(None) much faster than while True or while 1 :

 >>> def bench7(): ... foo = 0 ... a = time() ... for i in repeat(None): ... foo += 1 ... if foo == 100000000: ... break ... b = time() ... print a, b, ba ... >>> def bench8(): ... foo = 0 ... a = time() ... while True: ... foo += 1 ... if foo == 100000000: ... break ... b = time() ... print a, b, ba ... >>> bench7() 1326592924.41 1326592935.42 11.0051281452 >>> bench7() 1326592936.36 1326592947.48 11.1183578968 >>> bench8() 1326592951.47 1326592965.03 13.5640599728 >>> bench8() 1326592966.07 1326592979.6 13.5341670513` 

This kind of use for a while loop was the last thing I used for loops. Is there any reason I should use that I miss?

+4
source share
3 answers

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 :-)

+9
source

While loops allow you to test the meaning of truth.

 while x < y: 

Is it possible that this is slower than repetition?

+1
source

repeat(None) faster than while True , but not while 1 , because while True starts the search for the GLOBAL True variable. while 1 about 14% faster than repeat(None) .

-1
source

Source: https://habr.com/ru/post/1391054/


All Articles