Existe-t-il un moyen de créer des commentaires multilignes en Python?


1157

J'ai récemment commencé à étudier Python , mais je n'ai pas trouvé comment implémenter les commentaires sur plusieurs lignes. La plupart des langues ont des symboles de commentaire de bloc comme

/*

*/

J'ai essayé cela en Python, mais cela génère une erreur, donc ce n'est probablement pas la bonne façon. Python a-t-il réellement une fonction de commentaire multiligne?


2
Je suppose qu'étant un langage interprété, cela a du sens, comme dans le cas de sh ou bash ou zsh, c'est #la seule façon de faire des commentaires. Je suppose que cela facilite l'interprétation des scripts Python de cette façon.
Victor Zamanian

1
Je sais que cette réponse est ancienne, mais je l'ai rencontrée parce que j'avais la même question. La réponse acceptée fonctionne, bien que je ne connaisse pas suffisamment Python pour connaître les subtilités de la raison pour laquelle elle peut ne pas être correcte (par ADTC).
Brandon Barney

5
@BrandonBarney Permettez-moi de vous expliquer le problème. La réponse acceptée, qui utilise '' ', crée en fait une chaîne de plusieurs lignes qui ne fait rien. Techniquement, ce n'est pas un commentaire. Par exemple, vous pouvez écrire k = '' 'faux commentaire, vraie chaîne' ''. Ensuite, imprimez (k) pour voir ce que signifie ADTC.
pinyotae

3
Cela a tellement plus de sens maintenant. Je suis habitué à vba où la création d'une chaîne inutilisée entraîne une erreur. Je ne savais pas que python l'ignore. Cela fonctionne toujours pour le débogage et l'apprentissage, mais ce n'est pas une bonne pratique pour le développement réel.
Brandon Barney

Dans le code source Python, si vous cassez une longue ligne, l'éditeur la met automatiquement en retrait, pour montrer que la ligne brisée fait vraiment partie de la ligne précédente? Est-ce ce que je dois faire si je casse une longue file de pseudocodes?
alpha_989

Réponses:


1803

Vous pouvez utiliser des chaînes entre guillemets triples. Quand ils ne sont pas une docstring (la première chose dans une classe / fonction / module), ils sont ignorés.

'''
This is a multiline
comment.
'''

(Assurez-vous de bien mettre en retrait le '''début pour éviter un IndentationError.)

Guido van Rossum (créateur de Python) a tweeté cela comme un "conseil pro".

Cependant, le guide de style de Python, PEP8, privilégie l'utilisation de commentaires consécutifs sur une seule ligne , et c'est également ce que vous trouverez dans de nombreux projets. Les éditeurs de texte ont généralement un raccourci pour le faire facilement.


17
Hm. J'ai mis une énorme chaîne multiligne dans un script python test.pyjuste pour voir. Quand je le fais import test, un test.pycfichier est généré. Malheureusement, le pycfichier est énorme et contient la chaîne entière en texte brut. Suis-je en train de mal comprendre quelque chose, ou ce tweet est-il incorrect?
unutbu

23
@unutbu, si c'était la seule chose dans le fichier, c'était une docstring. Mettez du code avant et il disparaîtra du pyc. J'ai édité la réponse et mis „module“ à la liste des choses qui ont des docstrings.
Petr Viktorin,

31
Je n'aime pas la chaîne multiligne comme commentaires. La coloration syntaxique les marque comme des chaînes et non comme des commentaires. J'aime utiliser un éditeur décent qui s'occupe automatiquement de commenter les régions et d'envelopper les commentaires multilignes pendant que je tape. Bien sûr, c'est une question de goût.
Sven Marnach,

61
En tant que convention, je trouve utile d'utiliser """pour les docstrings et '''pour les commentaires de bloc. De cette manière, vous pouvez '''encapsuler vos docstrings habituels sans conflit.
Roshambo

19
Bien que vous puissiez utiliser des chaînes de plusieurs lignes comme commentaires sur plusieurs lignes, je suis surpris qu'aucune de ces réponses ne fasse référence à la sous - section PEP 8 qui recommande spécifiquement de construire des commentaires sur plusieurs lignes à partir de commentaires sur une seule ligne consécutifs, avec des #lignes vides pour distinguer les paragraphes. .
Air

82

Python a une syntaxe de chaîne / commentaire multiligne dans le sens où, sauf si elles sont utilisées comme docstrings, les chaînes multilignes ne génèrent aucun bytecode - tout comme les #commentaires pré-préparés. En effet, il agit exactement comme un commentaire.

D'un autre côté, si vous dites que ce comportement doit être documenté dans la documentation officielle pour être une véritable syntaxe de commentaire, alors oui, vous auriez raison de dire qu'il n'est pas garanti dans le cadre de la spécification du langage.

Dans tous les cas, votre éditeur de texte devrait également pouvoir facilement commenter une région sélectionnée (en plaçant un #devant chaque ligne individuellement). Sinon, passez à un éditeur de texte qui le fait.

La programmation en Python sans certaines fonctionnalités d'édition de texte peut être une expérience douloureuse. Trouver le bon éditeur (et savoir comment l'utiliser) peut faire une grande différence dans la façon dont l'expérience de programmation Python est perçue.

Non seulement l'éditeur de texte doit pouvoir mettre en commentaire des régions sélectionnées, mais il doit également pouvoir déplacer facilement des blocs de code vers la gauche et la droite, et il doit automatiquement placer le curseur au niveau de retrait actuel lorsque vous appuyez sur Enter. Le pliage de code peut également être utile.


Pour se protéger contre la décomposition des liens, voici le contenu du tweet de Guido van Rossum :

@BSUCSClub 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! :-)


3
la chaîne entre guillemets ('' ') fonctionne en effet pour répondre aux commentaires sur plusieurs lignes.
Varun Bhatia

Merci .. Utilisé ('' ') et ("" ") pour commenter le bloc mais cela ne m'a pas aidé pour les applications Django. Choisissez donc IDLE et il y a des options comme commenter la région et décommenter les régions (raccourci: Alt + 3 et Alt + 4 respectivement) dans le menu Format . Maintenant, c'est plus facile que jamais ..
Saurav Kumar

Vous devriez également envisager d'utiliser un IDE. Oui, ils sont lourds, mais s'ils sont utilisés correctement, ils peuvent vraiment augmenter le temps de codage. Personnellement, j'utilisais PyDev, et maintenant j'utilise PTVS (avec Visual Studio). Je recommanderais certainement PTVS, car c'est vraiment agréable de travailler avec, contenant les fonctionnalités ci-dessus avec beaucoup plus - intégration directe avec virtualenvs, et vraiment un bon débogage, pour le moins
Sbspider

2
@HappyLeapSecond Je pense que vous devriez le clarifier en disant "Python n'a pas de véritable syntaxe de commentaire multiligne, mais prend en charge les chaînes multilignes qui peuvent être utilisées comme commentaires."
ADTC

3
Ce que je veux, c'est un moyen simple de commenter des blocs entiers de code lors des tests. D'autres langues rendent cela facile. Python est juste une douleur.
Albert Godfrind

45

De la réponse acceptée ...

Vous pouvez utiliser des chaînes entre guillemets triples. Quand ils ne sont pas une docstring (première chose dans une classe / fonction / module), ils sont ignorés.

Ce n'est tout simplement pas vrai. Contrairement aux commentaires, les chaînes entre guillemets triples sont toujours analysées et doivent être syntaxiquement valides, quel que soit leur emplacement dans le code source.

Si vous essayez d'exécuter ce code ...

def parse_token(token):
    """
    This function parses a token.
    TODO: write a decent docstring :-)
    """

    if token == '\\and':
        do_something()

    elif token == '\\or':
        do_something_else()

    elif token == '\\xor':
        '''
        Note that we still need to provide support for the deprecated
        token \xor. Hopefully we can drop support in libfoo 2.0.
        '''
        do_a_different_thing()

    else:
        raise ValueError

Vous aurez soit ...

ValueError: invalid \x escape

... sur Python 2.x ou ...

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 79-80: truncated \xXX escape

... sur Python 3.x.

La seule façon de faire des commentaires sur plusieurs lignes qui sont ignorés par l'analyseur est ...

elif token == '\\xor':
    # Note that we still need to provide support for the deprecated
    # token \xor. Hopefully we can drop support in libfoo 2.0.
    do_a_different_thing()

Ensuite, vous pouvez utiliser r'raw string'- r'\xor' == '\\xor'.
GingerPlusPlus

1
Eh bien, tout "vrai" commentaire sur plusieurs lignes doit également être analysé et syntaxiquement valide. Les commentaires de style C ne peuvent pas contenir un */car cela terminera le bloc, par exemple.

1
@ dan1111, il est évident que le commentaire ne peut pas inclure de marqueur de fin, mais c'est la seule limitation.
el.pescado

14
'''les "commentaires" ont plus de limitations. Vous ne pouvez commenter que des déclarations entières, tandis que les commentaires peuvent mettre en commentaire des parties de l'expression. Exemple: En C, vous pouvez commenter quelques éléments de la liste: int a[] = {1, 2, /* 3, 4, */ 5};. Avec une chaîne multi-lignes, vous ne pouvez pas faire cela, car cela mettrait une chaîne dans votre liste.
el.pescado

35

En Python 2.7, le commentaire multiligne est:

"""
This is a
multilline comment
"""

Si vous êtes dans une classe, vous devez la tabuler correctement.

Par exemple:

class weather2():
   """
   def getStatus_code(self, url):
       world.url = url
       result = requests.get(url)
       return result.status_code
   """

20
les guillemets triples sont un moyen d'insérer du texte qui ne fait rien (je pense que vous pouvez le faire avec des chaînes simples entre guillemets également), mais ce ne sont pas des commentaires - l'interpréteur exécute réellement la ligne (mais la ligne ne le fait pas ne fais rien). C'est pourquoi l'indentation d'un «commentaire» à trois guillemets est importante.
Demis

12
Cette solution est incorrecte, le weather2commentaire est en fait une docstring car c'est la première chose dans la classe.
Ken Williams

D'accord avec @KenWilliams. Ce n'est pas une bonne solution. Essayez de placer cela au milieu d'une fonction / classe et voyez comment cela gâche votre formatage et automatise le pliage / peluchage du code.
alpha_989

25

AFAIK, Python n'a pas de commentaire de bloc. Pour commenter des lignes individuelles, vous pouvez utiliser le #caractère.

Si vous utilisez Notepad ++ , il existe un raccourci pour les commentaires de bloc . Je suis sûr que d'autres comme gVim et Emacs ont des fonctionnalités similaires.


2
c'est incorrect, voir les réponses sur l'utilisation de triples guillemets.
Fernando Gonzalez Sanchez

10
@FernandoGonzalezSanchez: Ce n'est vraiment pas incorrect. Cette "chaîne de plusieurs lignes en tant que commentaire" peut être mieux décrite comme un "pro-tip". Les documents officiels de Python ne disent rien à ce sujet, d'où la question posée par OP.
Sanjay T. Sharma

8
C'est un PEP pour docstrings; il n'y a pas une seule mention de "commentaire" sur cette page.
Sanjay T. Sharma

12

Je pense que ce n'est pas le cas, sauf qu'une chaîne multiligne n'est pas traitée. Cependant, la plupart, sinon tous les IDE Python ont une touche de raccourci pour «commenter» plusieurs lignes de code.


11

Si vous mettez un commentaire dans

"""
long comment here
"""

au milieu d'un script, Python / linters ne reconnaîtra pas cela. Le pliage sera foiré, car le commentaire ci-dessus ne fait pas partie des recommandations standard. Il vaut mieux utiliser

# Long comment
# here.

Si vous utilisez Vim , vous pouvez utiliser des plugins comme commentary.vim , pour commenter automatiquement de longues lignes de commentaires en appuyant sur Vjgcc. Où Vjsélectionne deux lignes de code et les gcccommente.

Si vous ne voulez pas utiliser des plugins comme ci-dessus, vous pouvez utiliser la recherche et le remplacement comme

:.,.+1s/^/# /g

Cela remplacera le premier caractère de la ligne actuelle et suivante par #.


8

Il n'existe pas de fonctionnalité telle qu'un commentaire sur plusieurs lignes. #est le seul moyen de commenter une seule ligne de code. Beaucoup d'entre vous ont répondu '' 'un commentaire' '' comme solution.

Cela semble fonctionner, mais en interne '''en Python prend les lignes jointes comme des chaînes régulières que l'interpréteur n'ignore pas comme l'utilisation des commentaires #.

Consultez la documentation officielle ici


5

Malheureusement, la stringification ne peut pas toujours être utilisée comme commentaire! Il est donc plus sûr de s'en tenir à la norme avant chaque ligne avec un #.

Voici un exemple:

test1 = [1, 2, 3, 4,]       # test1 contains 4 integers

test2 = [1, 2, '''3, 4,'''] # test2 contains 2 integers **and the string** '3, 4,'

4

Eh bien, vous pouvez essayer ceci (lors de l'exécution de la citation, l'entrée de la première question doit être citée avec '):

"""
print("What's your name? ")
myName = input()
print("It's nice to meet you " + myName)
print("Number of characters is ")
print(len(myName))
age = input("What's your age? ")
print("You will be " + str(int(age)+1) + " next year.")

"""
a = input()
print(a)
print(a*5)

Tout ce qui est joint entre """sera commenté.

Si vous recherchez des commentaires sur une seule ligne, c'est le cas #.


3

Commentaire multiligne en Python:

Pour moi, "" "et" "" ont fonctionné.

Exemple:

a = 10
b = 20
c = a+b
'''
print ('hello')
'''
print ('Addition is: ', a+b)

Exemple:

a = 10
b = 20
c = a+b
"""
print('hello')
"""
print('Addition is: ', a+b)

3

Les commentaires en ligne en Python commencent par un caractère de hachage.

hello = "Hello!" # This is an inline comment
print(hello)

salut!

Notez qu'un caractère de hachage dans un littéral de chaîne n'est qu'un caractère de hachage.

dial = "Dial #100 to make an emergency call."
print(dial)

Composez le # 100 pour passer un appel d'urgence.

Un caractère de hachage peut également être utilisé pour les commentaires sur une ou plusieurs lignes.

hello = "Hello"
world = "World"
# First print hello
# And print world
print(hello)
print(world)

Bonjour

Monde

Mettez le texte entre guillemets doubles pour prendre en charge la docstring.

def say_hello(name):
    """
    This is docstring comment and
    it's support multi line.
    :param name it's your name
    :type name str
    """
    return "Hello " + name + '!'


print(say_hello("John"))

Bonjour John!

Entourez le texte de triples guillemets simples pour les commentaires de bloc.

'''
I don't care the parameters and
docstrings here.
'''

2

Sur Python 2.7.13:

Célibataire:

"A sample single line comment "

Multiligne:

"""
A sample
multiline comment
on PyCharm
"""

2
Vous dites que les guillemets simples créent un commentaire en python 2.7?
mcalex

3
L'utilisation d'un seul ensemble de guillemets crée une chaîne. Un commentaire sur une seule ligne doit être précédé d'un #.
johanno

2

Bascule de commentaire multi-ligne officielle universelle de Visual Studio Code .

macOS: sélectionnez le bloc de code, puis +/

Windows: sélectionnez le bloc de code, puis Ctrl+/


2

Oui, c'est bien d'utiliser les deux:

'''
Comments
'''

et

"""
Comments
"""

Mais, la seule chose dont vous devez tous vous souvenir lors de l'exécution dans un IDE, c'est que vous devez exécuter le fichier entier pour être accepté en tant que codes de lignes multiples. Ligne par ligne 'RUN' ne fonctionnera pas correctement et affichera une erreur.


1

Pour commenter plusieurs lignes de code en Python, il suffit d'utiliser un #commentaire d' une seule ligne sur chaque ligne:

# This is comment 1
# This is comment 2 
# This is comment 3

Pour écrire des commentaires multilignes «corrects» en Python, il faut utiliser des chaînes multilignes avec la """syntaxe Python a la fonctionnalité de chaînes de documentation (ou docstrings). Il permet aux programmeurs d'ajouter facilement des notes rapides à chaque module, fonction, classe et méthode Python.

'''
This is
multiline
comment
'''

Notez également que vous pouvez accéder à docstring par un objet de classe comme celui-ci

myobj.__doc__

Qu'est-ce que cela ajoute aux réponses précédentes?
Peter Mortensen

Ma réponse contient plus de détails, ce qui peut aider davantage le développeur.
shafik


1

Je déconseille d'utiliser """pour les commentaires sur plusieurs lignes!

Voici un exemple simple pour mettre en évidence ce qui pourrait être considéré comme un comportement inattendu:

print('{}\n{}'.format(
    'I am a string',
    """
    Some people consider me a
    multi-line comment, but
    """
    'clearly I am also a string'
    )
)

Jetez maintenant un œil à la sortie:

I am a string

    Some people consider me a
    multi-line comment, but
    clearly I am also a string

La chaîne de plusieurs lignes n'a pas été traitée comme un commentaire, mais elle a été concaténée avec 'clearly I'm also a string'pour former une seule chaîne.

Si vous souhaitez commenter plusieurs lignes, faites-le conformément aux directives PEP 8 :

print('{}\n{}'.format(
    'I am a string',
    # Some people consider me a
    # multi-line comment, but
    'clearly I am also a string'
    )
)

Production:

I am a string
clearly I am also a string

Ne devrait-il pas être " lang-bash" au lieu de " bash" pour la coloration syntaxique? Dans tous les cas, cela semble généralement bizarre (par exemple pour "Certains" ici) - même s'il s'agit en fait de commandes en ligne de commande avec des paramètres. lang-none(la coloration syntaxique désactivée) peut être un meilleur choix.
Peter Mortensen

@PeterMortensen merci d'avoir pointé le bizarre en soulignant notre! Je suis allé avec "lang-none".
jojo

0

Utilisation de PyCharm IDE.

Vous pouvez commentet des uncommentlignes de code en utilisant Ctrl + /. Ctrl + / commente ou décommente la ligne actuelle ou plusieurs lignes sélectionnées avec des commentaires d'une seule ligne ({# in Django templates, or # in Python scripts). Pressing Ctrl+Shift+/pour un bloc de code source sélectionné dans un modèle Django entoure le bloc de {% comment %} and {% endcomment %}balises.


n = 5
while n > 0:
    n -= 1
    if n == 2:
        break
    print(n)

print("Loop ended.")

Sélectionnez toutes les lignes puis appuyez sur Ctrl + /


# n = 5
# while n > 0:
#     n -= 1
#     if n == 2:
#         break
#     print(n)

# print("Loop ended.")

0

Un commentaire multiligne n'existe pas réellement en Python. L'exemple ci-dessous se compose d'une chaîne non affectée, qui est validée par Python pour les erreurs syntaxiques.

Quelques éditeurs de texte, comme Notepad ++ , nous fournissent des raccourcis pour commenter un morceau de code ou des mots écrits.

def foo():
    "This is a doc string."
    # A single line comment
    """
       This
       is a multiline
       comment/String
    """
    """
    print "This is a sample foo function"
    print "This function has no arguments"
    """
    return True

De plus, Ctrl+ Kest un raccourci dans Notepad ++ pour bloquer les commentaires. Il ajoute un #devant chaque ligne sous la sélection. Ctrl+ Shift+ Kcorrespond à la décommentation de bloc.


0

Entre autres réponses, je trouve que le moyen le plus simple est d'utiliser les fonctions de commentaire IDE qui utilisent le support de commentaire Python de #.

J'utilise Anaconda Spyder et il a:

  • Ctrl+ 1- Commentaire / décommentation
  • Ctrl+ 4- Commentez un bloc de code
  • Ctrl+ 5- Décommentez un bloc de code

Il commenterait / décommenterait une / plusieurs ligne (s) de code avec #.

Je trouve ça le plus simple.

Par exemple, un commentaire de bloc:

# =============================================================================
#     Sample Commented code in spyder
#  Hello, World!
# =============================================================================

Merci @PeterMortensen pour la modification :)
aniltilanthe

-2

Sélectionnez les lignes que vous souhaitez commenter, puis utilisez Ctrl+ ?pour commenter ou décommenter le code Python dans l' éditeur de texte sublime .

Pour une seule ligne, vous pouvez utiliser Shift+ #.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.