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?

Dungeon Hunter
la source
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.

Petr Viktorin
la source
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! :-)

unutbu
la source
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()
Aya
la source
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
   """
SomeAnonymousPerson
la source
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.

Sanjay T. Sharma
la source
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.

Anti Earth
la source
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 #.

alpha_989
la source
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

RATAN KUMAR
la source
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,'
d.nedelchev
la source
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 #.

K_holla
la source
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)
Viraj Wadate
la source
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.
'''
Madan Sapkota
la source
2

Sur Python 2.7.13:

Célibataire:

"A sample single line comment "

Multiligne:

"""
A sample
multiline comment
on PyCharm
"""
AG
la source
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+/

Edison
la source
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.

Rajkamal Mishra
la source
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__
shafik
la source
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

Vous pouvez utiliser ce qui suit. Cela s'appelle DockString.

def my_function(arg1):
    """
    Summary line.
    Extended description of function.
    Parameters:
    arg1 (int): Description of arg1
    Returns:
    int: Description of return value
    """
    return arg1

print my_function.__doc__
merin
la source
"DockString" ? Avez-vous une référence?
Peter Mortensen
@PeterMortensen vous voilà datacamp.com/community/tutorials/docstrings-python
merin
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
jojo
la source
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.")
0m3r
la source
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.

Tu sais qui je suis
la source
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!
# =============================================================================
aniltilanthe
la source
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+ #.

Tarjeet Singh
la source