2014-07-17 15 views
6

Sto facendo un problema di ottimizzazione e sto scrivendo una lista gigantesca. Vorrei inserire commenti all'interno della lista come sottoInserire commenti all'interno di un elenco di più righe letterale

my_rhs = [1.0, 1.0, 0.0, 0.0, 0.0,\ #comment1 
     -1.0, -1.0, -1.0,\ #comment2 
      0.0, 0.0, 0.0] 

ma quando faccio questo Python dà un errore. Come posso commentare nei luoghi mostrati? Ho provato a definire ogni riga come una nuova lista e ad usare + da aggiungere ma non sembra funzionare. Come sotto

my_rhs = [1.0, 1.0, 0.0, 0.0, 0.0]+\ #comment1 
     [-1.0, -1.0, -1.0]+\ #comment2 
     [0.0, 0.0, 0.0] 

Come posso commentare nelle posizioni mostrate senza dare un errore a Python?

risposta

9

è sufficiente rimuovere le barre rovesciate:

my_rhs = [1.0, 1.0, 0.0, 0.0, 0.0, # comment1 
     -1.0, -1.0, -1.0, # comment2 
      0.0, 0.0, 0.0] 

Qui di seguito è una dimostrazione:

>>> my_rhs = [1.0, 1.0, 0.0, 0.0, 0.0, # comment1 
...   -1.0, -1.0, -1.0, # comment2 
...   0.0, 0.0, 0.0] 
>>> my_rhs 
[1.0, 1.0, 0.0, 0.0, 0.0, -1.0, -1.0, -1.0, 0.0, 0.0, 0.0] 
>>> 

Il carattere \ dice a Python che la seguente riga fa parte della linea di corrente. Così, interpreta in questo modo:

my_rhs = [1.0, 1.0, 0.0, 0.0, 0.0,\ #comment1 
     -1.0, -1.0, -1.0,\ #comment2 
      0.0, 0.0, 0.0] 

come equivalente a questo:

my_rhs = [1.0, 1.0, 0.0, 0.0, 0.0, #comment1 -1.0, -1.0, -1.0, #comment2 0.0, 0.0, 0.0] 

È interessante notare che PEP 8, lo stile-guida ufficiale per il codice Python, ha una sezione sul confezionamento lungo righe:

Il metodo preferito per il wrapping di linee lunghe è l'utilizzo del conteggio di riga implicito di Python. nuation tra parentesi, parentesi e parentesi graffe. Le linee lunghe possono essere suddivise su più righe avvolgendo le espressioni nelle parentesi . Questi dovrebbero essere usati preferibilmente usando un backslash per la continuazione della linea.

Questo estratto da Explicit Line Joining è anche rilevante:

Una linea che termina in una barra inversa non può portare un commento. Un backslash fa non continuare un commento. Una barra rovesciata non continua un token ad eccezione di per i valori letterali stringa (ad esempio, i token diversi dai valori letterali stringa non possono essere divisi tra le righe fisiche utilizzando una barra rovesciata). Un backslash è illegale altrove su una riga al di fuori di una stringa letterale.

+0

questa una risposta fantastica! .... Grazie! .... Vorrei poter sopravvivere, ma non sembra avere una "reputazione" qui intorno. – mathopt