web-dev-qa-db-fra.com

Pourquoi python utilise-t-il des guillemets non conventionnels pour les commentaires?

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?

30
mtahmed

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).

86
balpha

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 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.

44
Eli Collins

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."
18
jamessan

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.

5
Stefano Borini