2012-03-06 6 views
35

Qual è il modo migliore per avere un documento qui, senza newline nella parte superiore e inferiore? Per esempio:Python here document without newline in alto e in basso

print ''' 
dog 
cat 
''' 

avrà a capo in alto e in basso, e di sbarazzarsi di loro che devo fare questo:

print '''dog 
cat''' 

che trovo ad essere molto meno leggibile.

+0

'print '' '\ dog cat \' ''' proprio come la continuazione della linea –

risposta

51

come su questo?

print ''' 
dog 
cat 
'''[1:-1] 

O fino a quando non c'è alcun rientro sulla prima riga o spazio finale sull'ultima:

print ''' 
dog 
cat 
'''.strip() 

O anche, se non ti dispiace un po 'più disordine, prima e dopo la stringa in cambio di poter rientrare bene che:

from textwrap import dedent 

... 

print dedent(''' 
    dog 
    cat 
    rabbit 
    fox 
''').strip() 
+0

Penso che il tuo primo approccio sia il più elegante, dal momento che influisci solo sul primo e sull'ultimo carattere dello spazio bianco. Stavo usando la striscia prima attraverso una chiamata di funzione. – Juan

3

Si potrebbe utilizzare strip():

print ''' 
dog 
cat 
'''.strip() 
1

si fa effettivamente bisogno la sintassi multi-linea? Perché non emded solo una newline?

Trovo la stampa "dog \ ncat" molto più leggibile di entrambi.

+9

Chilometraggio varia. Sta chiedendo a heredoc, quindi diamo a lui :) – 0xC0000022L

+4

abbastanza sicuro che vuole stampare più di un cane gatto. So che è per questo che sono qui – kdubs

17

uso parentesi:

print (
'''dog 
cat''' 
) 

Utilizzare str.strip()

print ''' 
dog 
cat 
'''.strip() 

uso str.join()

print '\n'.join((
    'dog', 
    'cat', 
    )) 
+1

Parens penso che sia la strada da percorrere. È leggibile, è più conciso del metodo strip, più leggibile del \ n per i blocchi lunghi e sembra conforme agli standard ufficiali di codifica. –

+1

+1 per le parentesi. – dawg

20

Aggiungere backslash \ alla fine di linee indesiderate:

text = '''\ 
cat 
dog\ 
''' 

È leggermente più leggibile.

+0

Il backslash alla fine della riga 'dog' lo fa andare via. Poiché questa non è una stringa grezza, '\ [newline]' è ridotta a nulla – user2622016

+0

Finisce con l'apparire terribilmente divertente quando l'assegnazione della variabile è rientrata più in profondità del livello del modulo (ad esempio un metodo di una classe). – bukzor

+0

Grazie, esattamente quello che stavo cercando. Uso qui i documenti in Ruby e Bash (che non aggiungono una nuova riga prima della prima riga), e sembra inelegante rimuoverlo con un [1:] o strip(). –