Pourquoi n'a pas python simplement utilisé le style traditionnel de commentaires comme C/C++/Java utilise:
/**
* Comment lines
* More comment lines
*/
// line comments
// line comments
//
Y a-t-il une raison spécifique à cela ou est-ce simplement arbitraire?
Python n'utilise pas de guillemets triples pour les commentaires. Les commentaires utilisent le caractère de hachage (a.k.a. pound):
# this is a comment
La chose entre guillemets est un doc string , et, contrairement à un commentaire, est en fait disponible comme une vraie chaîne pour le programme:
>>> def bla():
... """Print the answer"""
... print 42
...
>>> bla.__doc__
'Print the answer'
>>> help(bla)
Help on function bla in module __main__:
bla()
Print the answer
Il n'est pas strictement nécessaire d'utiliser des guillemets triples, tant qu'il s'agit d'une chaîne. En utilisant """
n'est qu'une convention (et a l'avantage d'être multiligne).
Un certain nombre de réponses ont obtenu de nombreux points, mais ne donnent pas une vue complète du fonctionnement des choses. Résumer...
# comment
Est la façon dont Python fait des commentaires réels (similaires à bash et dans d'autres langages). Python n'a que "à la fin de la ligne ", il n'a pas de wrapper de commentaire multi-ligne explicite (contrairement au /* .. */
de javascript). La plupart des IDE Python vous permettent de sélectionner et de commenter un bloc à la fois , c'est le nombre de personnes qui gèrent cette situation.
Ensuite, il y a des chaînes normales python: elles peuvent utiliser des guillemets '
Ou "
(Par exemple 'foo'
"bar"
). La principale limitation de ces derniers est qu'ils ne s'étendent pas sur plusieurs lignes. C'est à cela que servent les chaînes multilignes: Ce sont des chaînes entourées de guillemets simples ou doubles ('''
Ou """
) et se terminent uniquement lorsqu'un terminateur correspondant non échappé est trouvé. Ils peuvent continuer sur autant de lignes que nécessaire et inclure tous les espaces blancs intermédiaires.
L'un ou l'autre de ces deux types de chaîne définit un objet chaîne complètement normal. Un nom de variable peut leur être attribué, des opérateurs leur sont appliqués, etc. Une fois analysé, il n'y a aucune différence entre les formats. Cependant, il existe deux cas particuliers basés sur où la chaîne est et comment elle est utilisée ...
Premièrement, si une chaîne vient d'être écrite, sans aucune opération supplémentaire appliquée et non affectée à une variable, que se passe-t-il? Lorsque le code s'exécute, la chaîne nue est fondamentalement supprimée. Donc, les gens ont trouvé pratique de commenter de gros morceaux de python en utilisant des chaînes multi-lignes (à condition que vous échappiez à toutes les chaînes multi-lignes internes). Ce n'est pas si courant ou sémantiquement correct , mais cela est autorisé.
La deuxième utilisation est que ces chaînes nues qui suivent immédiatement après une def Foo()
, class Foo()
, ou le début d'un module, sont traitées comme des chaînes contenant de la documentation pour cet objet, et stocké dans l'attribut __doc__
de l'objet. Il s'agit du cas le plus courant où les chaînes peuvent sembler être un "commentaire". La différence est qu'ils sont jouant un rôle actif dans le cadre du code analysé, étant stockés dans __doc__
... et contrairement à un commentaire, ils peuvent être lus au moment de l'exécution.
Les guillemets triples ne sont pas des commentaires. Ce sont littéraux de chaîne qui s'étendent sur plusieurs lignes et incluent ces sauts de ligne dans la chaîne résultante. Cela vous permet d'utiliser
somestr = """This is a rather long string containing
several lines of text just as you would do in C.
Note that whitespace at the beginning of the line is\
significant."""
au lieu de
somestr = "This is a rather long string containing\n\
several lines of text just as you would do in C.\n\
Note that whitespace at the beginning of the line is\
significant."
La plupart des langages de script utilisent # comme marqueur de commentaire afin de sauter automatiquement le Shebang (#!) Qui spécifie au chargeur de programme l'interprète à exécuter (comme dans #!/Bin/bash). Alternativement, l'interpréteur pourrait être chargé de sauter automatiquement la première ligne, mais il est beaucoup plus pratique de simplement définir # comme marqueur de commentaire et c'est tout, il est donc ignoré en conséquence.