Élément de note Python efficace 12 Évitez d'utiliser des blocs else après les boucles for et while

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

(python uniquement) Les pièges du bloc else!

Habituellement, les blocs else dans les langages de programmation sont principalement utilisés pour signifier "faites ceci si le bloc supérieur n'est pas implémenté". Mais pas en python

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

>>>
Loop 0
Loop 1
Loop 2
Else block

De cette manière, le bloc else est exécuté après la fin de l'exécution de la boucle for. De plus, une spécification mystérieuse selon laquelle le bloc else n'est pas exécuté si break est exécuté immédiatement avant.

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

>>>
Loop 0
Loop 1

De plus, si vous parcourez une séquence vide, le bloc else sera exécuté immédiatement.

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

>>>
Else block

De plus, s'il échoue au début de la boucle while, il sera exécuté tel quel

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

>>>

Else block

Comment utiliser des spécifications mystérieuses

Il est utile lors du traitement des informations après une boucle. Par exemple, en vérifiant si deux nombres sont premiers l'un par rapport à l'autre (la promesse n'est pas en dehors de la première place), si la promesse est trouvée sur le chemin pour essayer chaque nombre, on peut juger qu'elle n'est pas premier, mais boucle jusqu'à la fin Si elle n'est pas trouvée, on peut juger qu'elle est brute. Cette spécification est utile ici.

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

Il semble que ce n'est utile que si le bloc précédent a une vérification de rupture.

Si tel est le cas, vous devez écrire une fonction d'assistance distincte pour la rendre plus intelligente.

** Conclusion Si possible, évitez d'utiliser des blocs else dans les boucles **

Recommended Posts

Élément de note Python efficace 12 Évitez d'utiliser des blocs else après les boucles for et while
EP 12 Eviter les autres blocs après les boucles pendant et while.
Point 17 de la note Python efficace Respect de la certitude lors de l'utilisation d'itérateurs pour les arguments
Évitez les boucles imbriquées en PHP et Python
Une note utile lors de l'utilisation de Python après une longue période
Obtenir des informations sur les notes à l'aide du SDK Evernote pour Python 3
30/10/2016 else pour Python3> pour:
Recherche de balises pixiv et enregistrement d'illustrations à l'aide de Python
Squelettes extensibles pour Vim utilisant Python, Click et Jinja2
Élément de note Python efficace 20 Utilisez Aucun et la chaîne de documentation lors de la spécification d'arguments par défaut dynamiques
À propos de Python for loop
Élément de mémo Python efficace 3
Élément de mémo Python efficace 9 Considérons une expression de générateur pour la notation d'inclusion de grande
Un moyen simple d'éviter plusieurs boucles for en Python
Élément de note Python efficace 16 Envisagez de renvoyer un générateur sans renvoyer une liste
[Python] Accès et recadrage des pixels d'image à l'aide d'OpenCV (pour les débutants)