66 votes

Python, pourquoi le mot-clé elif?

Je viens de commencer la programmation python!
Il y a une chose qui m'interroge, le mot clé "elif".

Tous les autres langages de programmation que j'ai utilisés auparavant utilisent simplement la syntaxe "else if".
Quelqu'un at-il une idée de la raison pour laquelle les développeurs python ajoutent le mot-clé supplémentaire "elif"?

Pourquoi pas:

 if a:
    print("a")
else if b:
    print("b")
else:
    print("c")
 

121voto

Anna Lear Points 13919

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 gentil.


Merci à ign pour la référence à la documentation :

Le mot clé elif est l'abréviation de 'else if' et est utile pour éviter une indentation excessive.

77voto

Ben Points 22160

Langues avec C une syntaxe de type get else if gratuit sans avoir à la mettre en œuvre à tous.

La raison en est que, dans la syntaxe des structures de contrôle fonctionnent sur la prochaine instruction, qui peut être une instruction composée entre accolades si nécessaire (par exemple, { x += 1; y += 1 }).

Cela signifie qu'une fois que vous avez mis en œuvre if et else, else if tombe juste en dehors de la grammaire de la langue bien sûr gratuitement, sans autre effort de mise en oeuvre. Pour comprendre pourquoi, jetez un oeil à ceci:

if (condition) {
    if_body();
} else if (another_condition) {
    else_if_body();
} else {
    else_body();
}

Cela ressemble à un if avec un else if et else - joint, chaque appliquée à une instruction composée. Mais en fait il ne l'est pas. C'est en fait deux distincts if états, chacun avec exactement un else des cas; le second, if déclaration est à l'intérieur du corps de l' else de la première if déclaration.

else if { ... } est vraiment analysée comme else appliqué à l'instruction suivante, qui est une if déclaration (appliqué à l'instruction composée { else_if_body(); }. Ensuite, l'ultime else se lie à celle qui la précède if, ce qui est la seconde.

Voici la même chose écrite plus en ligne avec la façon dont il analysé1:

if (condition) {
    if_body();
} else {
    if (another_condition) {
        else_if_body();
    } else {
        else_body();
    }
}

Mais il s'avère que si la langue n'mettre directement en œuvre l' else if comme un premier de la classe option pour if des déclarations, il se comporte exactement de la même façon que la seconde indépendante if déclaration à l'intérieur de l' else de la première! Donc, il n'y a pas besoin de s'embêter à la mise en œuvre de else if à toutes les langues; les responsables de l'implémentation obtenir de l' else if gratuite avec ce style de syntaxe, une fois qu'ils ont mis en oeuvre if et else.

Python syntaxe ne permet pas de cette gratification.

Les programmeurs de C-syntaxe de style peut penser en termes de else if même si la langue a seulement if avec exactement zéro-ou-un else, mais seulement parce qu'ils peuvent écrire du code comme mon premier exemple de mise en forme dans une manière qui est différente d'un lecteur humain qu'il n'en faut pour le compilateur.

Python, otoh, que, utilise l'indentation pour indiquer la structure du bloc, ce qui oblige la structure du bloc de regarder la même chose pour un lecteur humain comme il le fait à l'interprète2. Une fois que vous avez obtenu if et else en Python-la syntaxe de style, les programmeurs pourraient toujours écrire du code qui se comporte de manière identique à une autre personne-si, en mettant un second if déclaration à l'intérieur de l' else d'une première. Mais qui est à la recherche comme ceci:

if condition:
    if_body()
else:
    if another_condition:
        else_if_body()
    else:
        else_body()

Cela semble laid, et c'est beaucoup plus complexe à penser en termes de qu'un d'autre-si la chaîne une fois que vous obtenez plus de 1 ou 2 autre-fi. Il est donc intéressant d'ajouter dans un langage explicite pour obtenir de la capacité à penser en termes de sinon-si. Même si techniquement il rend la langue plus complexe, cela fait vraiment penser en termes de la langue plus simple, il est donc bon de la complexité; avec un construits manuellement la chaîne de imbriquée ifs à l'intérieur d' elses le lecteur a manuellement lire tout le code et vérifier que chaque else à l'exception de la dernière contient exactement un if déclaration et rien d'autre, dans le but de conclure que l'ensemble de la séquence est l'équivalent d'une chaîne linéaire de conditions vérifiées dans l'ordre, avec un peu de code à exécuter pour la première case qui réussit.

Alors. Nous avons vu que les langues avec C-syntaxe pourrait tout aussi bien aller avec else if, parce qu'ils les obtenir gratuitement. C'est la raison pour laquelle ce qui existe. Langues avec Python syntaxe qui ont explicitement de faire quelque chose pour obtenir une construction qui peut être utilisé comme une autre, si. Pourquoi ont-ils choisi elif? C'est arbitraire; vous auriez à demander réellement le peuple qui a pris la décision.

Cependant Python n'a pas inventé elif, il a été autour dans d'autres langues long avant de Python existé. Donc, je suppose que quand ils ont dû mettre en œuvre explicite else-if ils ont simplement choisi un que les programmeurs ont déjà familier avec.


1 Techniquement, c'est comment les gens qui sont VRAIMENT sérieux au sujet de toujours en utilisant des accolades avec les structures de contrôle doivent écrire leur code. ;)

2 Vous pouvez certainement construire des contre-exemples, mais c'est l'idée générale de l'indentation base de la syntaxe.

17voto

Lie Ryan Points 24517

Pour éviter l'attelle ^ H ^ H ^ H ^ H ^ H ^ Helse si guerre.

En C / C ++, où vous avez un else if , vous pouvez structurer votre code dans beaucoup de styles différents:

 if (...) {
    ...
} else if (...) {
    ...
}


if (...) {
    ...
} 
else if (...) {
    ...
}

if (...) {
    ...
} else 
if (...) {
    ...
}

// and so on
 

en ayant un elif 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 .

9voto

Gordon Gustafson Points 14778

C'est comme ça. Javascript utilise else if , php utilise elseif , perl utilise elsif , les préprocesseurs C et python utilisent elif . Aucun d'entre eux ne se trompe, ils choisissent simplement une syntaxe légèrement différente pour faire la même chose. :RÉ

-2voto

Daniel A. White Points 91889

Très probablement son sucre syntaxique. Comme le Wend de Visual Basic.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X