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

Pourquoi python n'a-t-il pas simplement utilisé le style traditionnel des 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?

25
demandé sur jgritty 2011-08-14 18:44:02

4 réponses

Python n'utilise pas de guillemets triples pour les commentaires. Les commentaires utilisent le caractère hash (a. k. a. pound):

# this is a comment

La triple citation est une chaîne doc , et, contrairement à un commentaire, est réellement disponible en tant que chaîne réelle 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 que c'est une chaîne. Utiliser """ est juste une convention (et a l'avantage d'être multiligne).

77
répondu balpha 2011-08-14 14:50:46

Un certain nombre de réponses ont obtenu beaucoup de points, mais ne donnent pas une vue complète de la façon dont les choses fonctionnent. Résumer...

# comment est-ce que Python fait des commentaires réels (similaire à bash, et d'autres langages). Python n'a que des commentaires "à la fin de la ligne", il n'a pas de wrapper de commentaires multi-lignes explicite (par opposition à /* .. */ 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.

Alors il y a chaînes Python simples normales: elles peuvent utiliser des guillemets ' ou " (par exemple 'foo' "bar"). La principale limitation avec ceux-ci est qu'ils ne s'enroulent pas sur plusieurs lignes. C'est ce que sont les chaînes multiline: ce sont des chaînes entourées de guillemets simples ou doubles triples (''' ou """) et ne sont terminées que lorsqu'un terminateur Non échappé correspondant est trouvé. Ils peuvent continuer pour autant de lignes que nécessaire, et inclure tous les espaces intermédiaires.

L'un de ces deux types de chaîne définir un objet string complètement normal. On peut leur attribuer un nom de variable,leur appliquer des opérateurs, etc. Une fois analysé, il n'y a aucune différence entre les formats. Cependant, il existe deux cas spéciaux basés sur la chaîne est et comment elle est utilisée...

Tout d'abord, si une chaîne vient d'être écrite, sans aucune opération supplémentaire appliquée, et non affectée à une variable, que lui arrive-t-il? Lorsque le code s'exécute, la chaîne nue est fondamentalement supprimée. Donc, les gens j'ai trouvé pratique de commenter de gros morceaux de code python en utilisant des chaînes multi-lignes (à condition d'échapper à toutes les chaînes multi-lignes internes). Ce n'est pas si commun, ou sémantiquement correct, mais c'est autorisé.

La deuxième utilisation est que toutes ces chaînes nues qui suivent immédiatement après un def Foo(), class Foo(), ou le début d'un module, sont traités comme une chaîne contenant de la documentation pour cet objet, et stockés dans l'attribut __doc__ de l'objet. C'est le 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 à l'exécution.

41
répondu Eli Collins 2014-10-21 11:59:26

Les guillemets triples ne sont pas des commentaires. Ce sont des littéraux de chaîne {[4] } qui couvrent 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."
16
répondu jamessan 2011-08-14 14:56:34

La plupart des langages de script utilisent # comme marqueur de commentaire afin d'ignorer automatiquement le shebang (#!) qui spécifie au chargeur de programme l'interpréteur à 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 définir # comme marqueur de commentaire et c'est tout, donc il est ignoré en conséquence.

5
répondu Stefano Borini 2011-08-14 16:22:34