web-dev-qa-db-fra.com

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

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

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

et

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

Mais techniquement, ce sont des chaînes, n'est-ce pas?

J'ai googlé et lu le guide de style Python, mais je n'ai pas trouvé de réponse technique à la question de savoir pourquoi il n'y a pas d'implémentation formelle de commentaires multilignes,/* * /. Les guillemets triples ne me posent aucun problème, mais je suis un peu curieux de savoir ce qui a conduit à cette décision de conception.

236
CoolGravatar

Je doute que vous obtiendrez une meilleure réponse que celle-ci: "Guido n'a pas ressenti le besoin de faire des commentaires sur plusieurs lignes".

Guido a tweeté à ce sujet:

Conseil Python: vous pouvez utiliser des chaînes multilignes en tant que commentaires multilignes. Sauf s'ils sont utilisés comme docstrings, ils ne génèrent aucun code! :-)

254
Ned Batchelder

Les commentaires multi-lignes sont facilement cassables. Que faire si vous avez les éléments suivants dans un programme de calcul simple?

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

Essayez de commenter cela avec un commentaire multiligne:

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

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

60
Steve Losh

Le texte en triple citation ne doit PAS être considéré comme un commentaire multiligne; par convention, ils sont docstrings . Ils devraient décrire ce que fait votre code et comment l’utiliser, mais pas pour des choses comme la mise en commentaire de blocs de code.

Selon Guido, les commentaires multilignes dans Python ne sont que des commentaires monolignes contigus (recherchez "commentaires bloqués").

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

if False:
    # A bunch of code
34
Triptych

Cela renvoie probablement au concept de base selon lequel il devrait exister un moyen évident de mener à bien une tâche. Les styles de commentaire supplémentaires ajoutent des complications inutiles et pourraient diminuer la lisibilité.

30
Jarred McCaffrey

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

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

Voir PEP 0008 , section Commentaires

Et voyez si votre éditeur Python propose un raccourci clavier pour les commentaires de bloc. Emacs le supporte, tout comme Eclipse, probablement la plupart des IDE décents.

12
Abgan

De Le zen de Python :

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

9
Jeremy Cantrell

Pour commenter un bloc de code dans le Pycharm IDE:

  • Code | Commentaire avec commentaire en ligne
  • Windows ou Linux: Ctrl + /
  • Mac OS: Command + /
5

Personnellement, mon style de commentaire dans dis Java est comme

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

Donc, avoir des commentaires d'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 aussi un langage avec des commentaires sur une seule ligne, et personnellement, je trouve cela ennuyant, car les commentaires finissent par paraître moins comme les commentaires, et plutôt comme une citation.

'
' This is a VB.NET example
'

Les commentaires d'une seule ligne finissent par avoir moins d'utilisation de caractères que les commentaires de plusieurs lignes et sont moins susceptibles d'être échappés par des caractères douteux dans une déclaration d'expression régulière peut-être? J'aurais tendance à être d'accord avec Ned cependant.

5
Kezzer
# This
# is
# a 
# multi-line
# comment

Pour ce faire, utilisez le bloc de commentaires ou recherchez et remplacez (s/^/#/g) dans votre éditeur.

4
recursive

J'ai résolu ce problème en téléchargeant une macro pour mon éditeur de texte (TextPad) qui me permet de mettre en surbrillance les lignes et qui insère ensuite # au premier de chaque ligne. Une macro similaire supprime les #. Certains se demanderont peut-être pourquoi la multiligne est nécessaire, mais cela s'avère pratique lorsque vous essayez de "désactiver" un bloc de code à des fins de débogage.

3
kati

Commentaires multilignes utilisant INACTIF sur:

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

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

0
Jorgesys

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

Pour HTML , par contre, il y a davantage besoin de multiliners. Il est plus difficile de continuer à taper <!--comments like this-->.

0
stalepretzel

Ceci est juste une supposition .. mais

Parce qu'elles sont des chaînes, elles ont une 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 AST , ce qui facilite l'extraction de la documentation.

0
hasen

Parce que la convention # est courante et que vous ne pouvez vraiment rien faire avec un commentaire multiligne avec un commentaire #. C'est un accident historique, comme l'ascendance de /* ... */ commentaires remontant à PL/I,

0
Charlie Martin

Pour ceux qui recherchent des commentaires multilignes dans Python, l'utilisation du format entre guillemets triples 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 placé dans la chaîne suivante, dérangeant la touche 'species'. Mieux vaut simplement utiliser # pour les commentaires.

0
Itamar Mushkin

En outre, les commentaires multilignes sont une salope . Désolé de le dire, mais quelle que soit la langue, je ne les utilise pas à des fins de 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 corriger avec le débogueur, vous commencez donc à le déboguer manuellement en commentant des tronçons 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 irritant.

0
martiert