2012-06-11 9 views
27

Diciamo che ho una stringa estremamente lunga con argomenti che voglio creare. So che è possibile creare una stringa multilinea conStringa multi riga con argomenti. Come dichiarare?

cmd = """line 1 
     line 2 
     line 3""" 

Ma ora Diciamo che voglio passare 1, 2 e 3 come argomenti.

Questo funziona

cmd = """line %d 
     line %d 
     line %d""" % (1, 2, 3) 

Ma se ho un super lunga stringa con 30 + argomenti, come posso eventualmente passare tali argomenti in più righe? Passandoli su una singola riga, si perde lo scopo di provare anche a creare una stringa multilinea.

Grazie a qualcuno in anticipo per il loro aiuto e intuizione.

risposta

19

È possibile abusare delle proprietà di continuazione della linea della parentesi ( e della virgola ,.

cmd = """line %d 
     line %d 
     line %d""" % (
     1, 
     2, 
     3) 
+0

Grazie mille. Esattamente quello che stavo cercando. Non avrei mai saputo che avrei potuto avere più linee quando usavo le parentesi. Questo è di grande aiuto !!! – Quillion

2

questo funziona per me:

cmd = """line %d 
     line %d 
     line %d""" % (
      1, 
      2, 
      3 
    ) 
3

Per avere gli argomenti nella stessa linea sono inseriti, si potrebbe fare così:

cmd = "line %d\n"%1 +\ 
     "line %d\n"%2 +\ 
     "line %d\n"%3 

[EDIT:] In risposta al primo commento che mi è venuto in mente:

cmd = "\n".join([ 
     "line %d"%1, 
     "line %d"%2, 
     "line %d"%3]) 
+0

Fare ciò con 30+ argomenti non sarebbe molto efficiente. '" ".join()' in una lista, d'altra parte ... :) –

48

È possibile utilizzare la funzione str.format(), che consente argomenti denominati. Così,

'''line {0} 
line {1} 
line {2}'''.format(1,2,3) 

Si potrebbe naturalmente estendere questo usando *args la sintassi di Python per consentire di passare in un tuple o list.

args = (1,2,3) 
'''line {0} 
line {1} 
line {2}'''.format(*args) 

Se si riesce in modo intelligente un nome alle argomentazioni, la soluzione più robusta (anche se la più alta intensità di una battitura) sarebbe quella di utilizzare la sintassi di Python **kwargs di passare in un dizionario.

args = {'arg1':1, 'arg2':2, 'arg3':3} 
'''line {arg1} 
line {arg2} 
line {arg3}'''.format(**args) 

Per ulteriori informazioni sul mini-language str.format(), andate qui: http://docs.python.org/library/string.html#format-string-syntax

+1

+1 Il formato ** kwargs è ottimo per la leggibilità per molti scenari (anche se forse non è l'esempio dell'OP). – Darthfett

2

più Una variante con la String.Format() - Funzione.

s = "{0} " \ 
    "{1} " \ 
    "{2}" \ 
    .format("Hello", "world", "from a multiline string")  
print(s) 
1

Il modo più semplice potrebbe essere quella di utilizzare literal string interpolation (disponibile da Python 3.6 in poi e assumendo tutti gli argomenti sono di portata).

cmd = f"""line {1} 
     line {2} 
     line {3}""" 
Problemi correlati