web-dev-qa-db-fra.com

Python, pourquoi le mot-clé Elif?

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")
56
raisyn

C'est très probablement du sucre syntaxique. Comme le Wend de Visual Basic.

0
Daniel A. White

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.

114
Adam Lear

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.

65
Ben

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.

17
Lie Ryan

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

9
Gordon Gustafson

Je les trouve utiles pour aider à différencier les "else-if" des "else else".

6
Eddy Mulyono

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

0
masterLoki