C'è un modo per creare commenti multilinea in Python?


1157

Di recente ho iniziato a studiare Python , ma non sono riuscito a trovare come implementare i commenti su più righe. La maggior parte delle lingue ha simboli di commento a blocchi come

/*

*/

Ho provato questo in Python, ma genera un errore, quindi probabilmente questo non è il modo corretto. Python ha effettivamente una funzione di commento multilinea?


2
Suppongo che sia un linguaggio interpretato, ha senso, come nel caso di sh o bash o zsh, questo #è l'unico modo per fare commenti. Immagino che sia più semplice interpretare gli script Python in questo modo.
Victor Zamanian,

1
So che questa risposta è vecchia, ma l'ho trovata perché avevo la stessa domanda. La risposta accettata FUNZIONA, anche se non conosco abbastanza di Python per conoscere le complessità del perché potrebbe non essere corretta (per ADTC).
Brandon Barney,

5
@BrandonBarney Lascia che ti spieghi il problema. La risposta accettata, che usa '' ', in realtà crea una stringa multilinea che non fa nulla. Tecnicamente, non è un commento. Ad esempio, puoi scrivere k = '' 'commento falso, stringa reale' ''. Quindi, stampa (k) per vedere cosa significa ADTC.
pinyotae,

3
Adesso ha molto più senso. Sono abituato a vba dove la creazione di una stringa non utilizzata provoca un errore. Non mi ero reso conto che Python lo ignorasse. Funziona ancora almeno per il debug e l'apprendimento, ma non è una buona pratica per lo sviluppo reale.
Brandon Barney,

Nel codice sorgente di Python, se interrompi una linea lunga, l'editor la inserisce automaticamente, per mostrare che la linea spezzata fa davvero parte della linea precedente? È quello che dovrei fare se spezzo una lunga serie di pseudocodici?
alpha_989

Risposte:


1803

È possibile utilizzare stringhe tra virgolette. Quando non sono un docstring (la prima cosa in una classe / funzione / modulo), vengono ignorati.

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

(Assicurati di indentare il comando in modo '''appropriato per evitare un IndentationError.)

Guido van Rossum (creatore di Python) lo ha twittato come un "suggerimento professionale".

Tuttavia, la guida di stile di Python, PEP8, favorisce l'utilizzo di commenti consecutivi a riga singola , e questo è anche ciò che troverai in molti progetti. Gli editor di testo di solito hanno una scorciatoia per farlo facilmente.


17
Hm. Ho messo un'enorme stringa multilinea in uno script Python test.pysolo per vedere. Quando lo faccio import test, test.pycviene generato un file. Sfortunatamente, il pycfile è enorme e contiene l'intera stringa come testo normale. Sto fraintendendo qualcosa o questo tweet è errato?
unutbu,

23
@unutbu, se era l'unica cosa nel file, era una dotstring. Metti un po 'di codice prima che scompaia dal file pyc. Ho modificato la risposta e ho inserito "module" nell'elenco delle cose che hanno dotstring.
Petr Viktorin,

31
Non mi piace la stringa multilinea come commenti. L'evidenziazione della sintassi li contrassegna come stringhe, non come commenti. Mi piace usare un editor decente che si occupa automaticamente di commentare le regioni e di avvolgere i commenti su più righe mentre scrivo. Certo, è una questione di gusti.
Sven Marnach,

61
Come convenzione trovo utile usare """per i docstring e '''per i commenti a blocchi. In questo modo puoi avvolgere le '''tue solite dotstring senza conflitti.
Roshambo,

19
Sebbene sia possibile utilizzare stringhe a più righe come commenti a più righe, sono sorpreso che nessuna di queste risposte si riferisca alla sottosezione PEP 8 che raccomanda specificamente di costruire commenti a più righe da commenti a riga singola consecutivi, con #righe vuote per distinguere i paragrafi .
Air

82

Python ha una sintassi su più righe / commenti, nel senso che, se non utilizzate come docstring, le stringhe su più# righe non generano alcun bytecode , proprio come i commenti anticipati. In effetti, si comporta esattamente come un commento.

D'altra parte, se si dice che questo comportamento deve essere documentato nella documentazione ufficiale come sintassi di un commento vero, allora sì, sarebbe giusto dire che non è garantito come parte della specifica del linguaggio.

In ogni caso, il tuo editor di testo dovrebbe anche essere in grado di commentare facilmente una regione selezionata (posizionando una #davanti a ciascuna riga singolarmente). In caso contrario, passa a un editor di testo che lo fa.

La programmazione in Python senza determinate funzionalità di modifica del testo può essere un'esperienza dolorosa. Trovare l'editor giusto (e sapere come usarlo) può fare una grande differenza nel modo in cui viene percepita l'esperienza di programmazione di Python.

L'editor di testo non solo dovrebbe essere in grado di commentare le regioni selezionate, ma dovrebbe anche essere in grado di spostare facilmente blocchi di codice a sinistra e a destra, e dovrebbe posizionare automaticamente il cursore sul livello di rientro corrente quando si preme Enter. La piegatura del codice può anche essere utile.


Per proteggere dal decadimento dei collegamenti, ecco il contenuto del tweet di Guido van Rossum :

@BSUCSClub Suggerimento Python: è possibile utilizzare stringhe su più righe come commenti su più righe. Se non utilizzati come docstring, non generano codice! :-)


3
la stringa a tre virgolette ('' ') funziona davvero per soddisfare i commenti su più righe.
Varun Bhatia,

Grazie .. Usato ('' ') e ("" ") per commentare il blocco ma non mi ha aiutato per le applicazioni Django. Quindi ho scelto IDLE e ci sono opzioni come Comment comment region e Uncomment region (scorciatoia: Alt + 3 e Alt + 4 rispettivamente) nel menu Formato, ora è più facile che mai ..
Saurav Kumar,

Dovresti anche considerare l'utilizzo di un IDE. Sì, sono pesanti, ma se usati correttamente possono davvero aumentare i tempi di programmazione. Personalmente usavo PyDev e ora uso PTVS (con Visual Studio). Consiglio vivamente PTVS, in quanto è davvero bello lavorare con, contiene le funzionalità sopra e molto altro - integrazione diretta con virtualenvs e debug davvero buono, per non dire altro
Sbspider

2
@HappyLeapSecond Penso che dovresti chiarirlo dicendo "Python non ha una vera sintassi di commento multilinea, ma supporta stringhe multilinea che possono essere usate come commenti."
ADTC,

3
Quello che voglio è un modo semplice per commentare interi blocchi di codice durante i test. Altre lingue lo rendono facile. Python è solo un dolore.
Albert Godfrind,

45

Dalla risposta accettata ...

È possibile utilizzare stringhe tra virgolette. Quando non sono un docstring (prima cosa in una classe / funzione / modulo), vengono ignorati.

Questo semplicemente non è vero. A differenza dei commenti, le stringhe tra virgolette triple vengono comunque analizzate e devono essere sintatticamente valide, indipendentemente da dove compaiono nel codice sorgente.

Se si tenta di eseguire questo codice ...

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

Otterrai ...

ValueError: invalid \x escape

... su Python 2.xo ...

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

... su Python 3.x.

L'unico modo per fare commenti su più righe che vengono ignorati dal parser è ...

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

Quindi, puoi usare r'raw string'- r'\xor' == '\\xor'.
GingerPlusPlus,

1
Bene, anche qualsiasi commento "vero" su più righe deve essere analizzato e sintatticamente valido. I commenti in stile C non possono contenere un */dato che terminerà il blocco, ad esempio.

1
@ dan1111 è ovvio che il commento non può includere end marker, ma questa è l'unica limitazione.
el.pescado,

14
'''i "commenti" hanno più limitazioni. Puoi commentare solo intere dichiarazioni, mentre i commenti possono commentare parti dell'espressione. Esempio: In C, è possibile lasciare un commento, alcuni elementi della lista: int a[] = {1, 2, /* 3, 4, */ 5};. Con la stringa a più righe, non puoi farlo, poiché ciò inserisce una stringa nel tuo elenco.
el.pescado,

35

In Python 2.7 il commento multilinea è:

"""
This is a
multilline comment
"""

Nel caso in cui tu sia all'interno di una classe, dovresti farlo correttamente.

Per esempio:

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

20
le triple virgolette sono un modo per inserire testo che non fa nulla (credo che potresti farlo anche con normali stringhe tra virgolette singole), ma non sono commenti - l'interprete esegue effettivamente la riga (ma la riga no non fare nulla). Ecco perché è importante il rientro di un "commento" a tre citazioni.
Demis,

12
Questa soluzione non è corretta, il weather2commento è in realtà una docstring poiché è la prima cosa della classe.
Ken Williams

Concordo con @KenWilliams. Questa non è una soluzione corretta. Prova a metterlo nel mezzo di una funzione / classe e vedi come rovina la formattazione e automatizza la piegatura / lint del codice.
alpha_989,

25

AFAIK, Python non ha commenti in blocchi. Per commentare singole righe, puoi usare il #personaggio.

Se si utilizza Notepad ++ , esiste un collegamento per i commenti sui blocchi . Sono sicuro che altri come gVim ed Emacs hanno caratteristiche simili.


2
questo non è corretto, vedere le risposte sull'uso delle virgolette triple.
Fernando Gonzalez Sanchez,

10
@FernandoGonzalezSanchez: non è proprio sbagliato. Questa "stringa multi-riga come commento" può essere meglio descritta come "pro-tip". I documenti ufficiali di Python non dicono nulla al riguardo, quindi la domanda posta da OP.
Sanjay T. Sharma,

8
Questo è un PEP per dotstrings; non c'è una sola menzione di "commento" su quella pagina.
Sanjay T. Sharma,

12

Penso che non lo faccia, tranne per il fatto che una stringa multilinea non viene elaborata. Tuttavia, la maggior parte, se non tutti gli IDE Python hanno una scorciatoia per "commentare" più righe di codice.


11

Se inserisci un commento

"""
long comment here
"""

nel mezzo di uno script, Python / linters non lo riconoscerà. La piegatura verrà incasinata, poiché il commento sopra non fa parte delle raccomandazioni standard. È meglio usare

# Long comment
# here.

Se usi Vim , puoi plugin come commentary.vim , per commentare automaticamente lunghe righe di commenti premendo Vjgcc. Dove Vjseleziona due righe di codice e le gcccommenta.

Se non vuoi usare plugin come quelli sopra puoi usare cerca e sostituisci like

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

Questo sostituirà il primo carattere sulla riga corrente e successiva con #.


8

Non esiste una funzionalità come un commento su più righe. #è l'unico modo per commentare una singola riga di codice. Molti di voi hanno risposto '' 'un commento' '' come soluzione.

Sembra funzionare, ma internamente '''in Python prende le linee racchiuse come stringhe regolari che l'interprete non ignora come i commenti usando# .

Controlla la documentazione ufficiale qui


5

Purtroppo la stringa non può sempre essere usata come commento! Quindi è più sicuro attenersi allo standard anteponendo ciascuna riga a# .

Ecco un esempio:

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

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

4

Bene, puoi provare questo (quando esegui il citato, l'input alla prima domanda dovrebbe essere citato con '):

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

Qualunque cosa racchiusa tra """sarà commentata.

Se stai cercando commenti a riga singola, allora lo è #.


3

Commento multilinea in Python:

Per me, '' 'e "" "hanno funzionato.

Esempio:

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

Esempio:

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

3

I commenti incorporati in Python iniziano con un carattere hash.

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

Ciao!

Nota che un carattere hash all'interno di una stringa letterale è solo un carattere hash.

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

Comporre # 100 per effettuare una chiamata di emergenza.

Un carattere hash può essere utilizzato anche per commenti a riga singola o multipla.

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

Ciao

Mondo

Racchiudere il testo con doppie virgolette triple per supportare 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"))

Ciao John!

Racchiudere il testo con virgolette singole triple per i commenti di blocco.

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

2

Su Python 2.7.13:

singolo:

"A sample single line comment "

multilinea:

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

2
Stai dicendo che le virgolette singole creano un commento in Python 2.7?
Mcalex,

3
L'uso di un singolo set di virgolette crea una stringa. Un commento a riga singola deve essere preceduto da un #.
johanno,

2

Attiva / disattiva commento su più righe ufficiale universale di Visual Studio Code .

macOS: selezionare il blocco di codice e quindi +/

Windows: selezionare il blocco di codice e quindi Ctrl+/


2

Sì, è bene usare entrambi:

'''
Comments
'''

e

"""
Comments
"""

Ma l'unica cosa che tutti devi ricordare durante l'esecuzione in un IDE è che devi "ESEGUIRE" l'intero file per essere accettato come codice a più righe. Riga per riga 'RUN' non funzionerà correttamente e mostrerà un errore.


1

Per commentare più righe di codice in Python è sufficiente utilizzare un #commento a riga singola su ogni riga:

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

Per scrivere commenti "multilinea" su Python è necessario usare stringhe multilinea con la """sintassi Python ha la funzione stringhe di documentazione (o docstring). Offre ai programmatori un modo semplice per aggiungere note rapide con ogni modulo, funzione, classe e metodo Python.

'''
This is
multiline
comment
'''

Inoltre, menziona che puoi accedere a docstring da un oggetto classe come questo

myobj.__doc__

Cosa aggiunge questo alle risposte precedenti?
Peter Mortensen,

La mia risposta contiene maggiori dettagli, che possono aiutare di più gli sviluppatori.
Shafik,


1

Vorrei sconsigliare l'utilizzo """ per i commenti su più righe!

Ecco un semplice esempio per evidenziare quello che potrebbe essere considerato un comportamento imprevisto:

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

Ora dai un'occhiata all'output:

I am a string

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

La stringa a più righe non è stata considerata come un commento, ma è stata concatenata 'clearly I'm also a string'per formare una singola stringa.

Se vuoi commentare più righe, fallo secondo le linee guida PEP 8 :

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

Produzione:

I am a string
clearly I am also a string

Non dovrebbe essere " lang-bash" anziché " bash" per l'evidenziazione della sintassi? In ogni caso, di solito sembra strano (ad esempio per "Alcuni" qui) - anche se in realtà si tratta di comandi da riga di comando con parametri. lang-none(l'evidenziazione della sintassi disattivata) potrebbe essere una scelta migliore.
Peter Mortensen,

@PeterMortensen grazie per aver indicato lo strano evidenziare il nostro! Sono andato con "lang-none".
Jojo,

0

Utilizzo dell'IDE PyCharm.

Puoi commente uncommentrighe di codice usando Ctrl + /. Ctrl + / commenti o decommenta la riga corrente o diverse righe selezionate con commenti a riga singola ({# in Django templates, or # in Python scripts). Pressing Ctrl+Shift+/per un blocco selezionato di codice sorgente in un modello Django circonda il blocco con {% comment %} and {% endcomment %}tag.


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

print("Loop ended.")

Seleziona tutte le righe, quindi premi Ctrl + /


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

# print("Loop ended.")

0

In Python non esiste un commento multilinea. L'esempio seguente è costituito da una stringa non assegnata, convalidata da Python per errori sintattici.

Alcuni editor di testo, come Notepad ++ , ci forniscono scorciatoie per commentare un pezzo di codice o parole scritte.

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

Inoltre, Ctrl+ Kè un collegamento in Notepad ++ per bloccare il commento. Aggiunge un #davanti a ogni riga sotto la selezione. Ctrl+ Shift+ Kè per il commento di blocco.


0

Tra le altre risposte, trovo che il modo più semplice sia utilizzare le funzioni di commento IDE che utilizzano il supporto per i commenti di Python #.

Sto usando Anaconda Spyder e ha:

  • Ctrl+ 1- Commento / commento
  • Ctrl+ 4- Commenta un blocco di codice
  • Ctrl+ 5- Sblocca un blocco di codice

Commenterebbe / decommenterebbe una / più righe / e di codice con #.

Lo trovo il più semplice.

Ad esempio, un commento di blocco:

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

Grazie @PeterMortensen per la modifica :)
aniltilanthe

-2

Seleziona le righe che vuoi commentare, quindi usa Ctrl+ ?per commentare o rimuovere il commento dal codice Python nell'editor di testo Sublime .

Per la linea singola puoi usare Shift+ #.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.