2016-07-27 6 views
4

Gibt es in Python eine Möglichkeit, einer while-Schleife automatisch einen Iterationszähler hinzuzufügen?Zähle Iterationen in der while-Schleife

Ich mag die Linien count = 0 und count += 1 aus dem folgenden Code-Schnipsel entfernen, aber dennoch in der Lage sein, die Anzahl der Iterationen und Test gegen die boolean elapsed < timeout zu zählen:

ist
import time 

timeout = 60 
start = time.time() 

count = 0 
while (time.time() - start) < timeout: 
    print 'Iteration Count: {0}'.format(count) 
    count += 1 
    time.sleep(1) 
+3

Sie denken können [ 'enumerate'] (https://docs.python.org/2/library/functions.html#enumerate), die tut dies für' for' Schleifen, aber ich Ich kenne keine Lösung für "while", außer was Sie haben. –

+0

Leider Python [nicht erlaubt] (https://docs.python.org/2/faq/design.html#why-can-ti-use-an-assignment-in--anexpression) Zuweisung Anweisungen in Ein Ausdruck. Ansonsten könnte das viel sauberer sein. –

Antwort

9

Der sauberste Weg wahrscheinlich wandeln diese zu einer unendlichen Schleife for und den Loop-Test zu Beginn des Körpers bewegen:

import itertools 

for i in itertools.count(): 
    if time.time() - start >= timeout: 
     break 
    ... 
3

Sie könnten stattdessen die while-Schleife mit einem Generator bewegen und verwenden enumerate:

import time 

def iterate_until_timeout(timeout): 
    start = time.time() 

    while time.time() - start < timeout: 
     yield None 

for i, _ in enumerate(iterate_until_timeout(10)): 
    print "Iteration Count: {0}".format(count) 
    time.sleep(1)