269 votes

Pourquoi Python n'a-t-il pas de commentaires multilignes ?

OK, je suis conscient que les chaînes de caractères entre guillemets peuvent servir de commentaires multilignes. Par exemple,

"""Hello, I am a 
   multiline comment"""

et

'''Hello, I am a 
   multiline comment'''

Mais techniquement parlant, ce sont des cordes, non ?

J'ai fait des recherches sur Internet et lu le guide de style Python, mais je n'ai pas pu trouver de réponse technique à la question de savoir pourquoi il n'y a pas d'implémentation formelle des commentaires multilignes de type /* */. Je n'ai aucun problème à utiliser des guillemets triples, mais je suis un peu curieux de savoir ce qui a conduit à cette décision de conception.

8 votes

Si vous pouvez le faire en tant que chaîne, pourquoi ajouter d'autres moyens ?

13 votes

Je voulais juste ajouter que cela échoue si ce que vous essayez de commenter contient également des commentaires/chaînes de caractères à plusieurs lignes. Et c'est bien sûr pour cela que nous en avons besoin.

54 votes

@S.Lott Je pense que c'est une question utile. Pour comprendre pourquoi Python est bon, il est important de comprendre les décisions de conception qui ont été prises (et les décisions en cours qui sont toujours prises). La question n'est pas argumentative ou combative, elle est curieuse. Il n'est pas nécessaire d'être si dur avec la curiosité.

277voto

Ned Batchelder Points 128913

Je doute que vous obteniez une meilleure réponse que "Guido n'a pas ressenti le besoin d'avoir des commentaires sur plusieurs lignes".

Guido a a tweeté à ce sujet,

Astuce Python : Vous pouvez utiliser des chaînes de caractères multi-lignes comme des commentaires multi-lignes. Sauf si elles sont utilisées comme docstrings, elles ne génèrent aucun code ! :-)

29 votes

Voir Le tweet de Guido sur ce sujet.

16 votes

L'inconvénient de mélanger des chaînes de caractères de plusieurs lignes et des commentaires de bloc est que l'IDE n'a aucune idée de ce que vous voulez et ne peut donc pas afficher le commentaire dans un style différent selon les besoins.

22 votes

Il est également impossible de commenter le code avec des chaînes de caractères de plusieurs lignes (et peut entraîner des erreurs d'indentation si vous ne faites pas attention). Ew !

61voto

Steve Losh Points 11958

Les commentaires de plusieurs lignes sont facilement cassables. Que se passe-t-il si vous avez ce qui suit dans un simple programme de calculatrice ?

operation = ''
print("Pick an operation:  +-*/")
# Get user input here

Essayez de commenter cela avec un commentaire de plusieurs lignes :

/*
operation = ''
print("Pick an operation:  +-*/")
# Get user input here
*/

Oups, votre chaîne contient le délimiteur de fin de commentaire.

179 votes

L'aspect le plus intéressant de cette réponse est la façon dont elle est traitée par le surligneur syntaxique de SO.

0 votes

Je n'ai même pas remarqué... J'en reste là. :)

75 votes

C'est l'une des nombreuses raisons pour lesquelles nous disposons de caractères d'échappement, je ne vois pas en quoi ce serait une bonne raison de NE PAS prendre en charge les commentaires sur plusieurs lignes.

38voto

Triptych Points 70247

Les textes entre guillemets ne doivent PAS être considérés comme des commentaires multilignes ; par convention, ils sont docstrings . Ils doivent décrire ce que fait votre code et comment l'utiliser, mais pas pour des choses comme commenter des blocs de code.

Selon Guido, les commentaires multilignes en Python ne sont que des commentaires monolignes contigus (rechercher "bloquer les commentaires").

Pour commenter des blocs de code, j'utilise parfois le modèle suivant :

if False:
    # A bunch of code

7 votes

On dirait que Guido a changé son esprit depuis lors.

5 votes

En ce qui concerne la solution "if false :", le problème est qu'en python, tel qu'il fonctionne avec des tabulations, il faudrait tabuler tout le code sous le "if False :". Et détabler le chunk ensuite. Il faut donc être très habile avec son éditeur de texte.

3 votes

Si vous utilisez un éditeur décent, cela devrait prendre le même temps que */

30voto

Jarred McCaffrey Points 624

Cela remonte probablement au concept de base selon lequel il ne doit y avoir qu'une seule façon évidente d'effectuer une tâche. Des styles de commentaires supplémentaires ajoutent des complications inutiles et peuvent réduire la lisibilité.

10 votes

C'est là le problème, je crois : L'utilisation d'une chaîne de caractères comme commentaire n'est pas évidente et viole le principe "une seule façon de faire une tâche", puisqu'il existe deux façons de faire des commentaires : les chaînes et les # .

1 votes

Mais ce n'est pas très différent de ce que vous avez dans les langages basés sur le C : /* vs // , donc je ne vois pas en quoi c'est significativement pire.

0 votes

// Demandez-vous pourquoi quelqu'un voudrait un commentaire de plusieurs lignes. Bonnes raisons : ... Je ne peux pas vraiment penser à autre chose que "Je n'ai pas besoin de taper autant de ces # doohickeys" et "J'ai besoin d'afficher ce commentaire particulier d'une manière très précise, et cette manière précise ne permet pas de faire précéder le #". Supposons que quelqu'un veuille faire un diagramme ASCII, ou mettre un code javascript de référence à copier et coller si un problème spécifique se présente. La seule façon évidente de faire une tâche, ici, ne couvre pas les cas limites de cette tâche. Je suis d'accord, cependant, que les styles de commentaires supplémentaires sont MAUVAIS.

12voto

Abgan Points 2249

Les guillemets sont utilisés comme commentaires multilignes dans les docstrings. Et les commentaires # sont utilisés comme des commentaires en ligne et les gens s'y habituent.

La plupart des langages script n'ont pas non plus de commentaires multilignes. C'est peut-être la cause ?

Voir PEP 0008 , section Commentaires

Et voyez si votre éditeur Python offre un raccourci clavier pour commenter les blocs. Emacs le supporte, ainsi qu'Eclipse, et probablement la plupart des IDEs décents.

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