Effektiver Python-Hinweis Punkt 12 Vermeiden Sie die Verwendung von else-Blöcken nach for- und while-Schleifen

https://www.oreilly.co.jp/books/9784873117560/ P23~25

(nur Python) Die Fallstricke des else-Blocks!

Normalerweise werden sonst Blöcke in Programmiersprachen hauptsächlich verwendet, um "dies zu tun, wenn der obere Block nicht implementiert ist". Aber nicht in Python

for i in range(3):
    print('Loop %d' % i)
else:
    print('Else block')

>>>
Loop 0
Loop 1
Loop 2
Else block

Auf diese Weise wird der else-Block ausgeführt, nachdem die for-Schleife die Ausführung abgeschlossen hat. Außerdem eine mysteriöse Angabe, dass der else-Block nicht ausgeführt wird, wenn break unmittelbar zuvor ausgeführt wird.

for i in range(3):
    print('Loop %d' % i)
    if i == 1:
        break
else:
    print('Else block')

>>>
Loop 0
Loop 1

Wenn Sie eine leere Sequenz durchlaufen, wird der else-Block außerdem sofort ausgeführt.

for i in []:
    print('Never runs')
else:
    print('Else block')

>>>
Else block

Wenn es am Anfang der while-Schleife fehlschlägt, wird es so ausgeführt, wie es ist

while False:
    print('Never runs')
else:
    print('Else block')

>>>

Else block

Verwendung mysteriöser Spezifikationen

Dies ist nützlich, wenn Informationen nach einer Schleife verarbeitet werden. Wenn Sie beispielsweise prüfen, ob zwei Zahlen zueinander Primzahlen haben (das Versprechen liegt nicht außerhalb des ersten Platzes), und wenn das Versprechen auf dem Weg zum Ausprobieren jeder Zahl gefunden wird, kann beurteilt werden, dass es sich nicht um Primzahlen handelt, sondern sich bis zum Ende wiederholt Wenn es nicht gefunden wird, kann beurteilt werden, dass es roh ist. Diese Spezifikation ist hier nützlich.

a = 4
b = 9

for i in range(2, min(a, b) + 1):
    print('Tasting', i)
    if a % i == 0 and b % i ==0:
        print('Not coprime')
        break
else:
    print('Coprime')

>>>
Tasting 2
Tasting 3
Tasting 4
Coprime

Es scheint, dass es nur nützlich ist, wenn der vorherige Block eine Unterbrechungsprüfung hat.

In diesem Fall sollten Sie eine separate Hilfsfunktion schreiben, um sie intelligenter zu gestalten.

** Fazit Vermeiden Sie nach Möglichkeit die Verwendung von else-Blöcken in Schleifen **

Recommended Posts

Effektiver Python-Hinweis Punkt 12 Vermeiden Sie die Verwendung von else-Blöcken nach for- und while-Schleifen
EP 12 Vermeiden Sie sonst Blockierungen nach for- und while-Schleifen.
Effektiver Python-Hinweis Punkt 17 Respektieren Sie die Sicherheit, wenn Sie Iteratoren für Argumente verwenden
Vermeiden Sie verschachtelte Schleifen in PHP und Python
Ein nützlicher Hinweis, wenn Sie Python nach langer Zeit verwenden
Mit dem Evernote SDK für Python 3 erhalten Sie Informationen zu Notizen
2016-10-30 sonst für Python3> für:
Durchsuchen von Pixiv-Tags und Speichern von Illustrationen mit Python
Erweiterbare Skelette für Vim mit Python, Click und Jinja2
Effektives Python-Hinweiselement 20 Verwenden Sie None und die Dokumentationszeichenfolge, wenn Sie dynamische Standardargumente angeben
Über Python für Schleife
Effektives Python-Memo Punkt 3
Effektives Python-Memo-Element 9 Betrachten Sie einen Generatorausdruck für die Notation großer Einschlüsse
Eine einfache Möglichkeit, mehrere for-Schleifen in Python zu vermeiden
Effektiver Python-Hinweis Punkt 16 Erwägen Sie, einen Generator zurückzugeben, ohne eine Liste zurückzugeben
[Python] Zugreifen auf und Zuschneiden von Bildpixeln mit OpenCV (für Anfänger)