2010-10-06 12 views
34

Questa è probabilmente una domanda molto semplice per alcuni, ma mi ha bloccato. Puoi usare le variabili all'interno delle virgolette di Python?In Python, puoi avere delle variabili tra virgolette doppie? Se é cosi, come?

Nell'esempio che segue, come si fa utilizzare le variabili nel testo:

wash_clothes = 'tuesdays' 
clean_dishes = 'never' 

mystring =""" I like to wash clothes on %wash_clothes 
I like to clean dishes %clean_dishes 
""" 

print(mystring) 

Vorrei che al risultato in:

I like to wash clothes on tuesdays 
    I like to clean dishes never 

Se non ciò che è il modo migliore per gestire pezzi di grandi dimensioni di testo in cui hai bisogno di un paio di variabili, e c'è un sacco di testo e caratteri speciali?

risposta

31

Uno dei modi:

>>> mystring =""" I like to wash clothes on %s 
... I like to clean dishes %s 
... """ 
>>> wash_clothes = 'tuesdays' 
>>> clean_dishes = 'never' 
>>> 
>>> print mystring % (wash_clothes, clean_dishes) 
I like to wash clothes on tuesdays 
I like to clean dishes never 

Anche guardare la formattazione delle stringhe

+0

che è perfetto. Grazie mille! Questo è esattamente quello che stavo cercando! Non capisco esattamente come Python sappia quale% s sostituire con quale variabile, comunque. Guarda l'ordine in cui le variabili appaiono nel seguente: print mystring% (wash_clothes, clean_dishes) –

+0

@XL: puoi dare un'occhiata all'altra tecnica di formattazione per la quale avevo fornito il link ma l'esempio. L'esempio è stato fornito da NullUserException.Puoi usare entrambe le tecniche. – pyfunc

6

Sì. Credo che funzionerà.

do_stuff = "Tuesday"

mystring = """I like to do stuff on %(tue)s""" % {'tue': do_stuff}

EDIT: Ho dimenticato una 's' in di formato.

+3

Se stai per segnare una risposta, ti preghiamo di dire perché, in modo che tutti possiamo imparare dall'errore. – jonesy

+1

Questo è ottimo per variabili ripetute – AliBZ

42

Il modo migliore per farlo è usare str.format() piuttosto che il metodo che utilizza %:

Questo metodo di formattazione di stringhe è il nuovo standard in Python 3.0, e dovrebbe essere preferito al % formattazione descritto nella stringa Formattare le operazioni nel nuovo codice.

Esempio:

wash_clothes = 'tuesdays' 
clean_dishes = 'never' 

mystring =""" I like to wash clothes on {0} 
I like to clean dishes {1} 
""" 

print mystring.format(wash_clothes, clean_dishes) 
8

Penso che il modo più semplice è str.format() come altri hanno detto.

Tuttavia, ho pensato di menzionare che Python ha una classe string.Template che inizia in Python2.4.

Ecco un esempio dei documenti.

>>> from string import Template 
>>> s = Template('$who likes $what') 
>>> s.substitute(who='tim', what='kung pao') 
'tim likes kung pao' 

Uno dei motivi per cui mi piace è l'uso di un mapping invece di argomenti posizionali.

+0

Questo è un approccio interessante. In realtà non mi piacciono gli argomenti posizionali perché potrebbe diventare complicato se si dispone di un numero molto elevato di variabili. L'unica domanda che ho è se questo metodo è utile se si dispone di enormi quantità di testo formattato e caratteri speciali nella stringa del modello? –

+2

puoi usare gli argomenti posizionali con 'format'. 'd = dict (foo = 1, bar = 2); "{foo} {bar}". format (** d) ' – aaronasterling

+0

@martineau. Sì. quello era decisamente un tipo. – aaronasterling

1

Si noti inoltre che non è necessario la variabile intermedia:

name = "Alain" 
print """ 
Hello %s 
""" % (name) 
Problemi correlati