web-dev-qa-db-fra.com

Quel est le but des deux points avant un bloc en Python?

Quel est le but des deux points avant un bloc en Python?

Exemple:

if n == 0:
    print "The end"
65
Joshua Swink

Les deux points sont là pour déclarer le début d'un bloc en retrait.

Techniquement, ce n'est pas nécessaire. vous pouvez simplement indenter et désindenter lorsque le blocage est terminé. Cependant, sur la base du Python koan «explicite vaut mieux qu'implicite» (EIBTI), je crois que Guido a délibérément rendu le côlon obligatoire, donc toute instruction qui devrait être suivie d'un code en retrait se termine par un colon. (Il autorise également les one-liners si vous continuez après les deux points, mais ce style n'est pas largement utilisé.)

Cela facilite également le travail des éditeurs à auto-indentation sensibles à la syntaxe, ce qui est également pris en compte dans la décision.


Cette question s'avère être un Python FAQ , et j'ai trouvé une de ses réponses par Guido ici :

Pourquoi les deux-points sont-ils nécessaires pour les instructions if/while/def/class?

Les deux points sont principalement nécessaires pour améliorer la lisibilité (l'un des résultats du langage expérimental ABC). Considère ceci:

if a == b 
    print a

contre 

if a == b: 
    print a

Remarquez comment le second est légèrement plus facile à lire. Notez de plus comment deux points génèrent l’exemple dans cette réponse FAQ; c’est une utilisation standard en anglais.

Une autre raison mineure est que les deux points facilitent la tâche des éditeurs avec la coloration syntaxique; ils peuvent rechercher des colons pour décider du moment où l'indentation doit être augmentée au lieu de devoir analyser plus en détail le texte du programme.

71
tzot

Considérez la liste suivante de choses à acheter à l'épicerie, écrite en Pewprikanese.

pewkah
lalala
    chunkykachoo
    pewpewpew
skunkybacon

Quand je lis cela, je suis confus. Le chunkykachoo et le pewpewpew sont-ils une sorte de lalala? Ou que se passe-t-il si chunkykachoo et pewpewpew sont mis en retrait simplement parce qu'ils sont des objets spéciaux?

Maintenant, voyez ce qui se passe lorsque mon ami pewprikanais ajoute un colon pour m'aider à mieux analyser la liste: (<- like this)

pewkah
lalala:   (<-- see this colon)
    chunkykachoo
    pewpewpew
skunkybacon

Maintenant, il est clair que le chunkykachoo et le pewpewpew sont une sorte de lalala.

Supposons qu'une personne commence à apprendre Python, qui est son premier langage de programmation à apprendre. Sans les deux points, il est fort probable qu'elle continue de penser "ces lignes sont en retrait, car elles ressemblent à des éléments spéciaux", et il faudra peut-être un certain temps pour comprendre que ce n'est pas la meilleure façon de penser à l'indentation.

23
Yoo

Trois raisons:

  1. Pour augmenter la lisibilité. Les deux points aident le code à circuler dans le bloc en retrait suivant.
  2. Pour aider les éditeurs de texte/IDE, ils peuvent automatiquement mettre en retrait la ligne suivante si la ligne précédente s'est terminée par un signe deux-points.
  3. Pour faciliter l’analyse par python.
15
Ryan

Autant que je sache, il est délibéré que le lecteur doit s'attendre à une indentation après les deux points.

Cela rend aussi possible des constructions comme celle-ci:

if expression: action()
code_continues()

Notez (comme un commentateur) que ce n’est pas exactement le standard en or brillant d’un bon style Python. Il serait bien mieux d’avoir un blanc, là:

if expression: action()

code_continues()

pour éviter la confusion. Je voulais simplement préciser, avec le premier exemple, qu’il est possible d’écrire ainsi, car le code pour la variable if qui suit immédiatement les deux points permet au compilateur de comprendre que la ligne suivante devrait pas être en retrait.

5
unwind

Selon Guido Van Rossum, l'inventeur de Python, l'idée d'utiliser un colon pour rendre la structure plus apparente est inspirée d'expériences antérieures avec un prédécesseur de Python, le langage ABC, qui ciblait également les débutants. Apparemment, lors de leurs premiers tests, les apprenants débutants ont progressé plus rapidement avec deux points que sans eux. Lisez l’ensemble de l’histoire sur le blog d’histoire post-python de Guido.

http://python-history.blogspot.com/2009/02/early-language-design-and-development.html

Et oui, le côlon est utile dans les doublures et est moins agaçant que le point-virgule. Aussi, guide de style pour la pause recommandée de longue date sur plusieurs lignes uniquement lorsque celle-ci se termine par un opérateur binaire

x = (23 + 
     24 + 
     33)

L'ajout d'une déclaration composée faite de deux points a le même aspect pour une plus grande uniformité de style.

Il existe un codage «sans colon» pour CPython et un dialecte sans colon, appelé Cobra. Ceux-ci n'ont pas ramassé. 

0
Serge