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

252

OK, je suis conscient que les chaînes de guillemets triples 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 chaînes, n'est-ce pas?

J'ai googlé et lu le guide de style Python, mais je n'ai pas pu trouver de réponse technique pour expliquer pourquoi il n'y a pas d'implémentation formelle de multiline, / * * / type de commentaires. 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.

CoolGravatar
la source
8
Si vous pouvez le faire sous forme de chaîne, pourquoi ajouter d'autres moyens?
Brody
12
Je voulais juste ajouter qu'il échoue si ce que vous essayez de commenter se trouve également avoir des commentaires / des chaînes multi-lignes. Et c'est bien sûr pourquoi nous en avons besoin.
nycynik
50
@ S.Lott Je pense que c'est une question utile. Afin de 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 en cours). La question n'est ni argumentative ni combative; c'est curieux. Pas besoin d'être aussi dur avec la curiosité.
Mark E. Haase
6
Si vous avez besoin d'un commentaire sur plusieurs lignes pour la morue juste if False:le code
AturSams
5
@Brody Parce que les chaînes sont traitées. Les commentaires sont ignorés. Il y a des problèmes avec l'utilisation de chaînes comme commentaires. Regardez autour de vous :)
ADTC

Réponses:

266

Je doute que vous obtiendrez une meilleure réponse que, "Guido n'a pas ressenti le besoin de commentaires sur plusieurs lignes".

Guido a tweeté à ce sujet:

Astuce Python: vous pouvez utiliser des chaînes multilignes comme commentaires multilignes. À moins qu'ils ne soient utilisés comme docstrings, ils ne génèrent aucun code! :-)

Ned Batchelder
la source
28
Voir le tweet de Guido à ce sujet.
Petr Viktorin,
15
un inconvénient de mélanger les commentaires de chaînes et de chaînes multi-lignes est que l'IDE n'a aucune idée de ce que vous voulez, donc ne peut pas afficher les commentaires dans un style différent selon les besoins.
Baiyan Huang
21
Cela rend également impossible de commenter le code avec des chaînes multi-lignes (et peut entraîner des erreurs d'indentation si vous ne faites pas attention). Ew!
Mike Graham
3
J'ai travaillé dans de nombreux domaines où si votre code contient du code commenté, votre code est rejeté et vous pouvez même vous retrouver invité à mettre à jour votre CV. Supprimez le code qui n'est pas nécessaire, pas de problème si le code est sous contrôle de version, ou utilisez-le if False:avant le code qui doit être désactivé.
Steve Barnes
4
@SteveBarnes convient que les gros blocs de code commenté en production sont mauvais. Mais je ne comprends pas pourquoi if Falsec'est mieux. Il accomplit exactement la même chose, tout en étant moins clair (car il n'est pas aussi évident à première vue que le bloc de code a été désactivé).
59

Les commentaires sur plusieurs lignes sont facilement cassables. Et si vous disposez des éléments suivants dans un programme de calculatrice simple?

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

Essayez de commenter cela avec un commentaire sur plusieurs lignes:

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

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

Steve Losh
la source
174
La meilleure chose à propos de cette réponse est de savoir comment elle est gérée par le surligneur de syntaxe de SO.
Nietzche-jou
73
C'est l'une des nombreuses raisons pour lesquelles nous avons des caractères d'échappement, je ne vois pas cela comme une bonne raison de NE PAS prendre en charge les commentaires sur plusieurs lignes.
Natalie Adams
34
Je ne comprends pas votre logique - peut-être que mon commentaire n'était pas assez clair. Si nous avons utilisé \ comme caractère d'échappement: print ("Choisissez une opération: + - * \ /") "* /" ne désigne plus un bloc de commentaire de fin comme littéralement / sera imprimé. Allez-y et testez cela en C ++. En fait, le surligneur de syntaxe de SO montrera que c'est valide. Ce n'est pas un sujet complexe, il existe depuis des années dans d'autres langues. Je vous demanderais de mettre à jour votre message pour inclure l'utilisation de caractères d'échappement pour montrer que vous POUVEZ utiliser "* /" dans votre code.
Natalie Adams
23
que faire si votre code contient '' '. oups votre code contient le délimiteur de commentaire de fin
siamii
21
Les commentaires sur plusieurs lignes ne sont pas intrinsèquement cassables; c'est juste que la plupart de leurs implémentations le sont (y compris celles de Python). La façon évidente de faire des commentaires sur plusieurs lignes en Python, à mon avis, est de me laisser simplement commencer un bloc de commentaires avec #:et d'utiliser l'indentation pour montrer quand le commentaire est terminé. Il est propre, cohérent et gère parfaitement l'imbrication.
GatesDA
34

Le texte entre guillemets triple ne doit PAS être considéré comme un commentaire sur plusieurs lignes; par convention, ce sont des docstrings . Ils devraient 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 contigus sur une seule ligne (recherche de "commentaires de bloc").

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

if False:
    # A bunch of code
Triptyque
la source
6
On dirait que Guido a changé d'avis depuis lors.
Petr Viktorin,
5
en ce qui concerne la solution "if false:", le problème est qu'en python, comme cela fonctionne avec les onglets, vous devrez tabuler tout le code sous le "if False:". Et dégagez le morceau par la suite. Il faudrait donc être assez astucieux avec votre éditeur de texte.
barlop
3
si vous utilisez un éditeur décent, cela devrait être le même temps que * /
AturSams
@barlop yup - apprenez à vos éditeurs! Ceci est généralement réalisable en moins d'une seconde dans vim avecV}>>
Triptyque
30

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

Jarred McCaffrey
la source
8
C'est le problème, je crois: l'utilisation d'une chaîne comme commentaire n'est pas évidente et viole le principe "une façon de faire une tâche", car il y a deux façons de faire des commentaires: les chaînes et #.
GatesDA
1
Mais ce n'est pas très différent de ce que vous avez dans les langages basés sur C: / * vs //, donc je ne vois pas à quel point c'est bien pire.
Ben Roberts
//, Considérez POURQUOI quelqu'un voudrait un commentaire sur plusieurs lignes. Bonnes raisons: ... je ne peux pas vraiment penser à autre chose que "je n'ai pas à 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 ne pas autoriser le # précédent. " Supposons que quelqu'un veuille faire un diagramme ASCII, ou mettez du code javascript de référence à copier et coller si un problème spécifique survient. La seule façon évidente de faire une tâche, ici, ne couvre pas les cas marginaux de cette tâche. Je suis d'accord, cependant, que les styles de commentaires supplémentaires sont MAUVAIS.
Nathan Basanese
3
"Je n'ai pas besoin de taper autant de ces # doohickeys". C'est précisément pourquoi presque toutes les langues ont des commentaires de bloc (/ * .. * /). Croyez-le ou non, mais j'aime documenter ce que fait mon code: les entrées, les sorties, les algorithmes utilisés, les paramètres ... C'est beaucoup de texte qui est également modifié. La restriction aux seuls commentaires sur une seule ligne est tout simplement ridicule. Notez que je ne préconise PAS l'approche pour commenter le code - bien que cela soit souvent pratique lorsque vous essayez des approches alternatives, tant que les effets secondaires possibles bien connus sont compris.
Albert Godfrind
3
L'autre chose qui me déplaît à propos de python est qu'il s'agit essentiellement d'un langage conçu par un seul homme. Tout ce que Guido dit est la vérité ... Nous avons donc toutes ces étranges incompatibilités entre les versions linguistiques. Pourquoi ? Parce que Guido l'a dit ...
Albert Godfrind
12

Eh bien, les guillemets triples sont utilisés comme commentaires multilignes dans les docstrings. Et # les commentaires sont utilisés comme commentaires en ligne et les gens s'y habituent.

La plupart des langages de 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 propose un raccourci clavier pour commenter les blocs. Emacs le prend en charge, tout comme Eclipse, probablement la plupart des IDE décents.

Abgan
la source
9

Du Zen de Python :

Il devrait y avoir une - et de préférence une seule - manière évidente de le faire.

Jeremy Cantrell
la source
5

Personnellement, mon style de commentaire dit que Java est comme

/*
 * My multi-line comment in Java
 */

Donc, avoir des commentaires sur une seule ligne n'est pas une si mauvaise chose si votre style est typique de l'exemple précédent, car en comparaison, vous auriez

#
# My multi-line comment in Python
#

VB.NET est également un langage avec des commentaires sur une seule ligne, et personnellement, je trouve cela ennuyeux car les commentaires finissent par ressembler moins à des commentaires J'aime et plus à une sorte de citation

'
' This is a VB.NET example
'

Les commentaires sur une seule ligne finissent par avoir moins d’utilisation de caractères que les commentaires sur plusieurs lignes, et sont moins susceptibles d’être échappés par certains caractères douteux dans une instruction regex peut-être? Je serais plutôt d'accord avec Ned.

Kezzer
la source
5

Pour commenter un bloc de code dans l' IDE Pycharm :

  • Code | Commentaire avec commentaire de ligne
  • Windows ou Linux: Ctrl+/
  • Mac OS: Command+/
Craig S. Anderson
la source
4
# This
# is
# a 
# multi-line
# comment

Utilisez le bloc de commentaires ou recherchez et remplacez (s / ^ / # / g) dans votre éditeur pour y parvenir.

récursif
la source
3

J'ai résolu cela en téléchargeant une macro pour mon éditeur de texte (TextPad) qui me permet de mettre en évidence les lignes et insère ensuite # au premier de chaque ligne. Une macro similaire supprime les #. Certains peuvent se demander pourquoi la multiligne est nécessaire mais elle est utile lorsque vous essayez de "désactiver" un bloc de code à des fins de débogage.

kati
la source
1

Pour tous ceux qui recherchent des commentaires sur plusieurs lignes en Python - l'utilisation du format de guillemet triple peut avoir des conséquences problématiques, comme je viens de l'apprendre à la dure. Considère ceci:

this_dict = {
    'name': 'Bob',

"""
This is a multiline comment in the middle of a dictionary
"""

    'species': 'Cat'
}

Le commentaire sur plusieurs lignes sera inséré dans la chaîne suivante, gâchant le 'species' clé. Mieux vaut simplement utiliser #pour les commentaires.

Itamar Mushkin
la source
0

Parce que la convention # est courante et qu'il n'y a vraiment rien que vous puissiez faire avec un commentaire multiligne que vous ne pouvez pas avec un commentaire # -sign. C'est un accident historique, comme l'ascendance des /* ... */commentaires remontant à PL / I,

Charlie Martin
la source
0

Supposons qu'ils étaient simplement considérés comme inutiles. Puisqu'il est si facile de taper simplement#a comment , les commentaires multilignes peuvent simplement consister en de nombreux commentaires sur une seule ligne.

Pour le HTML , en revanche, il y a plus de besoin de multilignes. Il est plus difficile de continuer à taper <!--comments like this-->.

stalepretzel
la source
4
ce n'est pas le but - il existe des cas d'utilisation évidents pour les commentaires sur une seule ligne et sur plusieurs lignes. Je les ai largement utilisés dans d'autres langues (bien que je sache que les puristes de python ne se soucient pas des autres langues). ;)
johndodo
1
essayez de le faire avec 200 lignes de code, que vous devez retirer, remettre, puis retirer à nouveau. Taper 200 # initiaux devient très rapide.
DragonLord
0

C'est juste une supposition .. mais

Comme ce sont des chaînes, elles ont une certaine valeur sémantique (le compilateur ne s'en débarrasse pas), il est donc logique qu'elles soient utilisées comme docstrings. Ils font en fait partie de l' AST , donc l'extraction de la documentation devient plus facile.

hasen
la source
0

De plus, les commentaires multilignes sont une salope . Désolé de le dire, mais quelle que soit la langue, je ne les utilise à d'autres fins que le débogage. Disons que vous avez un code comme celui-ci:

void someFunction()
{
    Something
    /*Some comments*/
    Something else
}

Ensuite, vous découvrez qu'il y a quelque chose dans votre code que vous ne pouvez pas résoudre avec le débogueur, alors vous commencez à le déboguer manuellement en commentant des morceaux de code de plus en plus petits avec ces commentaires multilignes. Cela donnerait alors la fonction:

void someFunction()
{ /*
    Something
   /* Comments */
   Something more*/
}

C'est vraiment énervant.

martiert
la source
3
euh super, mais Python n'a pas de /*commentaires de style.
Triptyque
17
Bon, puisque python n'a pas de vrais commentaires multilignes, c'était un peu difficile de donner des exemples en python.
martiert
2
Personnellement, je ne comprends pas le problème. Supprimez simplement le supplément * /. Ou utilisez // pour commenter des lignes simples si vous avez besoin d'être précis.
Natalie Adams
4
Il existe plusieurs langues (dont beaucoup sont fonctionnelles pour une raison quelconque) qui autorisent les commentaires imbriqués. Recherchez "nested" dans rosettacode.org/wiki/Comments pour des exemples.
Keith
1
eh bien, il serait irritant de mettre un commentaire sur plusieurs lignes dans un commentaire sur plusieurs lignes. Et même si je ne me souviens que d'un peu de mon programme à la fois, je me souviens au moins de la partie de mon programme que je regarde et de ce que j'ai commenté. Mais si vous ne vous en souvenez même pas, vous pouvez utiliser le fait que certains IDE mettent en italique ce qui est un commentaire. Quoi qu'il en soit, évidemment, pour une fonction aussi minuscule, vous pouvez également utiliser des commentaires sur une seule ligne. Mais si vous commentez un gros morceau de programme, vous avez vraiment besoin d'un commentaire sur plusieurs lignes. ou un éditeur de texte avec cette fonctionnalité.
barlop
0

Commentaires multilignes utilisant IDLE sur:

  • Mac OS X , après la sélection du code, commentez un bloc de code avec Ctrl+ 3et décommentez en utilisant Ctrl+ 4.

  • Windows , après la sélection du code, commente un bloc de code avec Ctrl+ Alt+ 3et décommente en utilisant Ctrl+ At+ 4.

Jorgesys
la source
-1

Je me souviens d'avoir lu un gars qui mettrait ses commentaires sur plusieurs lignes dans une variable à trois guillemets:

x = '''
This is my
super-long mega-comment.
Wow there are a lot of lines
going on here!
'''

Cela prend un peu de mémoire, mais il vous offre une fonctionnalité de commentaire sur plusieurs lignes, et la plupart des éditeurs mettront en évidence la syntaxe pour vous :)

Il est également facile de commenter le code en l'enveloppant simplement avec

x = '''

et

'''
turvyc
la source
18
retirez le x =et il ne prend pas de mémoire.
endolith