Je viens de commencer la programmation Python, et je me pose des questions sur le mot clé Elif
.
Autres langages de programmation que j'ai utilisés avant utilisation else if
. Quelqu'un at-il une idée pourquoi les développeurs Python ont ajouté le mot clé supplémentaire Elif
?
Pourquoi pas:
if a:
print("a")
else if b:
print("b")
else:
print("c")
C'est très probablement du sucre syntaxique. Comme le Wend
de Visual Basic.
Autant que je sache, il est là pour éviter une indentation excessive. Tu pourrais écrire
if x < 0:
print 'Negative'
else:
if x == 0:
print 'Zero'
else:
print 'Positive'
mais
if x < 0:
print 'Negative'
Elif x == 0:
print 'Zero'
else:
print 'Positive'
est tellement plus agréable.
Merci à ign pour la référence docs :
Le mot clé
Elif
est l'abréviation de 'else if', et est utile pour éviter une indentation excessive.
Les langues avec une syntaxe de type C obtiennent else if
Gratuitement sans avoir à l'implémenter du tout.
La raison en est que dans cette syntaxe, les structures de contrôle opèrent simplement sur l'instruction suivante, qui peut être une instruction composée entourée d'accolades si nécessaire (par exemple { x += 1; y += 1 }
).
Cela signifie qu'une fois que vous avez implémenté if
et else
, else if
Tombe naturellement de la grammaire de la langue gratuitement, sans autre effort d'implémentation. Pour voir pourquoi, jetez un œil à ceci:
if (condition) {
if_body();
} else if (another_condition) {
else_if_body();
} else {
else_body();
}
Cela ressemble à un if
avec un else if
Et un else
attachés, chacun étant appliqué à une instruction composée. Mais en fait ce n'est pas le cas. Il s'agit en fait de deux instructions if
distinctes, chacune avec exactement un cas else
; la deuxième instruction if
se trouve dans le corps de la else
de la première instruction if
.
else if { ... }
Est vraiment analysé lorsque else
est appliqué à l'instruction suivante, qui est une instruction if
(appliquée à l'instruction composée { else_if_body(); }
. Ensuite, la dernière else
se lie au if
précédent, qui est le deuxième.
Voici la même chose écrite plus en accord avec la façon dont elle est analysée1:
if (condition) {
if_body();
} else {
if (another_condition) {
else_if_body();
} else {
else_body();
}
}
Mais il s'avère que si le langage implémentait directement else if
Comme une option de première classe pour les instructions if
, il se comporterait exactement comme le deuxième indépendant if
dans le else
du premier! Il n'est donc pas nécessaire de s'embêter à implémenter else if
; les implémenteurs de langage obtiennent else if
gratuitement avec ce style de syntaxe, une fois qu'ils ont implémenté if
et else
.
La syntaxe de Python ne permet pas ce cadeau.
Les programmeurs de la syntaxe de style C peuvent penser en termes de else if
Même si le langage n'a que if
avec exactement zéro ou un else
, mais uniquement parce qu'ils peuvent écrire du code comme mon premier exemple qui est formaté d'une manière qui semble différente pour un lecteur humain que pour le compilateur.
Python, OTOH, utilise l'indentation pour indiquer la structure du bloc, ce qui force la structure du bloc à ressembler à un lecteur humain comme à l'interprète2. Une fois que vous avez if
et else
dans la syntaxe de style Python, les programmeurs peuvent toujours écrire du code qui se comporte de manière identique dans un autre if, en mettant une seconde if
dans le else
d'une première. Mais cela ressemble à ceci:
if condition:
if_body()
else:
if another_condition:
else_if_body()
else:
else_body()
Cela a l'air moche, et il est beaucoup plus complexe de penser en termes de chaîne else-if une fois que vous obtenez plus de 1 ou 2 else-ifs. Il vaut donc la peine d'ajouter une fonctionnalité de langage explicite pour retrouver la capacité de penser en termes d'autre-si. Même si cela rend techniquement le langage plus complexe, cela rend en fait penser en termes de langage plus simple, donc c'est une bonne complexité; avec une chaîne de if
imbriquée construite manuellement à l'intérieur de else
, le lecteur doit lire manuellement tout le code et vérifier que chaque else
sauf le dernier en contient exactement un if
et rien d'autre, afin de conclure que la séquence entière est équivalente à une chaîne linéaire de conditions vérifiées dans l'ordre, avec du code à exécuter pour la première vérification qui réussit.
Donc alors. Nous avons vu que les langages avec une syntaxe de type C pourraient aussi bien aller avec else if
, Car ils l'obtiennent gratuitement. C'est la raison pour laquelle cela existe. Les langages avec une syntaxe de type Python doivent explicitement faire quelque chose pour obtenir une construction qui peut être utilisée comme un else-if. Pourquoi ont-ils choisi Elif
? C'est arbitraire; il faudrait demander aux personnes qui ont pris la décision.
Cependant Python n'a pas inventé Elif
, il existait dans d'autres langues bien avant Python existait. Donc je voudrais devinez que lorsqu'ils devaient implémenter une construction else-if explicite, ils en choisissaient simplement une que les programmeurs connaissaient déjà.
1 Techniquement, c'est ainsi que les personnes qui sont vraiment sérieuses à toujours utiliser des accolades avec des structures de contrôle devraient écrire leur code. ;)
2 Vous pouvez certainement construire des contre-exemples à cela, mais c'est l'idée générale de la syntaxe basée sur l'indentation.
Pour éviter l'accolade ^ H ^ H ^ H ^ H ^ Helse en cas de guerre.
En C/C++ où vous avez un else if
, vous pouvez structurer votre code dans de nombreux styles différents:
if (...) {
...
} else if (...) {
...
}
if (...) {
...
}
else if (...) {
...
}
if (...) {
...
} else
if (...) {
...
}
// and so on
en ayant un Elif
à la place, une telle guerre ne se produirait jamais puisqu'il n'y a qu'une seule façon d'écrire un Elif
. De plus, Elif
est beaucoup plus court que else if
.
C'est comme ça. Javascript utilise else if
, php utilise elseif
, Perl utilise elsif
, le préprocesseur C et python use Elif
. Aucun d'entre eux n'a tort, ils choisissent juste une syntaxe légèrement différente pour faire la même chose.: D
Je les trouve utiles pour aider à différencier les "else-if" des "else else".
Elif est une sorte de remplacement du commutateur dans d'autres langues mais avec plus de puissance
par exemple en C vous écrivez
Commutateur (numéro) { cas 1: doA () pause; cas 2: doB () pause; cas N: doN () pause; par défaut: doSomethingElse () pause ; }
en Python vous écrivez
si numéro == 1: doA () Numéro elif == 2: doB () Numéro elif == N: doC () sinon: doSomethingElse ()
Comme vous le voyez, Elif
est plus puissant car vous pouvez mettre des instructions plus complexes que dans un commutateur, et éviter d'imbriquer if/else
déclarations