
Questo articolo descrive un ciclo (esecuzione ripetuta) che utilizza l’istruzione in Python.
A differenza dell’istruzione for, che recupera in sequenza elementi iterabili come list, mentre si ripete l’espressione condizionale è true.
In questo articolo vengono descritti i seguenti contenuti.
- Utilizzo di base dell’istruzione in Python
- Termina il ciclo:
break
- Continua al ciclo successivo:
continue
- Eseguire dopo la normale terminazione:
else
- Ciclo infinito con istruzione mentre
- Termina con l’ingresso da tastiera
- Cessazione forzata
Vedere il seguente articolo per la dichiarazione per. L’istruzione per è più appropriato quando si desidera ottenere un elemento come list o quando si desidera eseguire solo un certo numero di volte.
Invece di usare l’istruzione mentre, è possibile implementare un ciclo infinito usando l’istruzione per e le funzioni del modulo itertools della libreria standard. I cicli infiniti con contatori, ecc. possono essere scritti facilmente utilizzando le funzioni di itertools.
Utilizzo di base dell’istruzione in Python
L’istruzione in Python è scritta come segue:
while expression:
... <do something>
L’esempio specifico è il seguente.
i = 0
while i < 3:
print(i)
i += 1
# 0
# 1
# 2
È possibile specificare più condizioni per la parte dell’espressione con eo o.
Termina il ciclo:break
Usa pausa per terminare il ciclo mentre.
i = 0
while i < 3:
print(i)
if i == 1:
print('!!BREAK!!')
break
i += 1
# 0
# 1
# !!BREAK!!
Continua al ciclo successivo:continue
Puoi saltare il ciclo e passare al successivo continuando.
break termina l’intero ciclo, ma continua salta il codice solo dopo l’istruzione continua nel ciclo.
while i < 3:
if i == 1:
print('!!CONTINUE!!')
i += 1
continue
print(i)
i += 1
# 0
# !!CONTINUE!!
# 2
Si noti che se si scrive il codice per una variabile utilizzata nell’espressione come i += 1 dopo continue, la variabile non verrà aggiornata e il ciclo non verrà terminato in modo imprevisto.
La risoluzione forzata è definita alla fine.
Eseguire dopo la normale terminazione:else
Usa else per eseguire qualcosa dopo che il ciclo è stato completato con successo.
i = 0
while i < 3:
print(i)
i += 1
else:
print('!!FINISH!!')
# 0
# 1
# 2
# !!FINISH!!
Se il ciclo viene terminato per interruzione, la suite nella clausola else non viene eseguita.
i = 0
while i < 3:
print(i)
if i == 1:
print('!!BREAK!!')
break
i += 1
else:
print('!!FINISH!!')
# 0
# 1
# !!BREAK!!
In caso di continue, viene eseguita la suite nella clausola else.
i = 0
while i < 3:
if i == 1:
print('!!SKIP!!')
i += 1
continue
print(i)
i += 1
else:
print('!!FINISH!!')
# 0
# !!SKIP!!
# 2
# !!FINISH!!
Ciclo infinito con istruzione mentre
Se l’espressione condizionale nell’istruzione mentre è sempre True, il ciclo non termina mai e l’esecuzione viene ripetuta all’infinito.
Nell’esempio seguente, il tempo UNIX viene acquisito da time.time() e il tempo trascorso viene misurato per impostare la condizione per l’interruzione.
import time
start = time.time()
while True:
time.sleep(1)
print('processing...')
if time.time() - start > 5:
print('!!BREAK!!')
break
# processing...
# processing...
# processing...
# processing...
# processing...
# !!BREAK!!
Ad esempio, un numero diverso da zero o una stringa non vuota è considerato True, quindi anche mentre 1:, ecc. risulterà in un ciclo infinito.
start = time.time()
while 1:
time.sleep(1)
print('processing...')
if time.time() - start > 5:
print('!!BREAK!!')
break
# processing...
# processing...
# processing...
# processing...
# processing...
# !!BREAK!!
Nel codice di esempio precedente viene utilizzato un ciclo infinito per la spiegazione, ma la stessa operazione può essere scritta senza un ciclo infinito come illustrato di seguito.
start = time.time()
while time.time() - start <= 5:
time.sleep(1)
print('processing...')
else:
print('!!FINISH!!')
# processing...
# processing...
# processing...
# processing...
# processing...
# !!FINISH!!
Termina con l’ingresso da tastiera
Per terminare il ciclo infinito tramite l’input da tastiera invece di impostare l’interruzione, cattura KeyboardInterrupt con ctrl + c.
try:
while True:
time.sleep(1)
print('processing...')
except KeyboardInterrupt:
print('!!FINISH!!')
Se si preme ctrl + c dal terminale in esecuzione (Mac) o dal prompt dei comandi (Windows cmd.exe), il ciclo mentre viene terminato e viene eseguita la clausola exclude.
Vedere l’articolo seguente per la gestione delle eccezioni.
Cessazione forzata
Se sbagli impostando l’espressione condizionale, il processo potrebbe cadere inaspettatamente in un ciclo infinito e non finire mai.
Può essere interrotto forzatamente nei seguenti modi.
- ctrl + c in un terminale in esecuzione
- Termina il processo in Activity Monitor o Task Manager
- Trova il nome del processo Python e uccidilo