2016-11-22 4 views
1

Ich hoffe, jemand kann erklären, was mit dieser While-Schleife passiert.Wie funktioniert diese While-Schleife?

x=deque([(1,2,3)]) 
while x: 
    a,b,c = x.popleft() 
    do stuff with values in x 
    x.append((d,e,f)) 

ich, dass x ein deque mit 3 Einträgen, die durch neue Werte ständig ersetzt werden. Aber ich habe noch nie eine while Schleife ohne irgendeine Bedingung getroffen. Wie weiß die Schleife, wann sie aufhören soll?

+4

alles in Python boolean Wert hat, es zu brechen. Also, 'deques'. Sie geben 'False' zurück, wenn sie leer sind. Das ist deine Ausgangsbedingung. Nachdem das gesagt wurde, gibt es solche Schleifen (zumindest so), die wie folgt aussehen: 'while True:'. Diese Schleifen können nur von innen mit "Pause" beendet werden! –

+1

Beachten Sie auch, dass Ihre Deque nicht drei, sondern nur ein Element (ein Tupel von drei) hat, und die Schleife wird wahrscheinlich nie aufhören, da 'x' am Ende niemals' x.append' sein kann (außer es gibt eine "break" oder "continue" in dem ausgelassenen code) –

Antwort

0
x=deque([(1,2,3)]) # create new deque 
while x: # while not empty 
    a,b,c = x.popleft() # pop values and assign them to a and b and c 
    # do stuff with values in x - this is comment too 
    x.append((d,e,f)) # assumes produced new values d 
         #and e and f and pushes them to x 
# this assumes there is always d and e and f values and stays forever in loop 

wie hier erklärt Python 2.7: How to check if a deque is empty?

+1

die 'do stuff mit werten in x' ist wahrscheinlich wo die' d', 'e' und' f' herkommen. Es ist also nicht genau ein Kommentar, sondern Pseudocode. Das ist mein Understanding mindestens –

+0

@ Ev.Kounis ja aber wahrscheinlich – obayhan

-1

Der Boolesche Wert von x=deque([(1,2,3)]) ist True weil sie einen Wert hat und nicht gleich None. Dies ist eine Infite-Schleife wie while 1: oder while True:.

Für diese Schleife beenden Sie entweder ein break verwenden würden, wenn eine Bedingung oder x = None gesetzt erfüllt ist die Schleife

+2

"Der boolesche Wert von x = deque ([(1,2,3)]) ist True, weil es einen Wert hat und nicht gleich None ist." Das ist nicht ganz richtig. Der boolesche Wert einer Deque (wie bei anderen Sequenztypen) ist ebenfalls False, wenn die Deque leer ist. Somit ist 'while x' nicht gleichbedeutend mit einer Endlosschleife und in der Tat eher für Sequenztypen üblich. Die Deque wird jedoch niemals leer sein, wenn die Bedingung überprüft wird, mit dem "append" am Ende der Schleife. –