Come inserisco una variabile in una stringa?


246

Vorrei inserire un intin string. Questo è quello che sto facendo al momento:

num = 40
plot.savefig('hanning40.pdf') #problem line

Devo eseguire il programma per diversi numeri, quindi mi piacerebbe fare un ciclo. Ma l'inserimento della variabile in questo modo non funziona:

plot.savefig('hanning', num, '.pdf')

Come inserisco una variabile in una stringa Python?

Risposte:


163
plot.savefig('hanning(%d).pdf' % num)

L' %operatore, quando segue una stringa, consente di inserire valori in quella stringa tramite codici di formato ( %din questo caso). Per maggiori dettagli, consultare la documentazione di Python:

https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting


40
Si noti che l' %operatore è obsoleto a partire da Python 3.1. Il nuovo modo preferito è quello di utilizzare il .format()metodo come discusso in PEP 3101 e menzionato nella risposta di Dan McDougall.
Chris Mueller,

499

Oh, i molti, molti modi ...

Concatenazione di stringhe:

plot.savefig('hanning' + str(num) + '.pdf')

Identificatore di conversione:

plot.savefig('hanning%s.pdf' % num)

Utilizzando i nomi delle variabili locali:

plot.savefig('hanning%(num)s.pdf' % locals()) # Neat trick

Utilizzando str.format():

plot.savefig('hanning{0}.pdf'.format(num)) # Note: This is the new preferred way

Utilizzando f-string:

plot.savefig(f'hanning{num}.pdf') # added in Python 3.6

Utilizzando string.Template:

plot.savefig(string.Template('hanning${num}.pdf').substitute(locals()))

16
Per utilizzare l'operatore stringa di formato con argomenti multipli, si può usare una tupla come operando: 'foo %d, bar %d' % (foo, bar).
fiedl,

12
Il tuo tipo di trucco funziona anche con la nuova sintassi del formato:plot.savefig('hanning{num}s.pdf'.format(**locals()))
pix

13
Con l'introduzione di f-string in Python 3.6, questo può ora essere scritto come plot.savefig(f'hanning{num}.pdf'). Ho aggiunto una risposta con queste informazioni.
joelostblom,

avuto problemi con l'utilizzo di locals () all'interno di una funzione che chiamava una variabile globale; usato% globals () invece che ha funzionato
lobi


17

Non sei sicuro di cosa faccia esattamente tutto il codice che hai pubblicato, ma per rispondere alla domanda posta nel titolo, puoi usare + come la normale funzione concat per le stringhe e str ().

"hello " + str(10) + " world" = "hello 10 world"

Spero che aiuti!


6
Mentre questa risposta è corretta, le stringhe di costruzione +dovrebbero essere evitate in quanto estremamente costose
slayton il

6

In generale, puoi creare stringhe usando:

stringExample = "someString " + str(someNumber)
print(stringExample)
plot.savefig(stringExample)

4

Se si desidera inserire più valori nella stringa che è possibile utilizzare format

nums = [1,2,3]
plot.savefig('hanning{0}{1}{2}.pdf'.format(*nums))

Provocherebbe la stringa hanning123.pdf. Questo può essere fatto con qualsiasi array.


3

Avevo bisogno di una versione estesa di questo: invece di incorporare un singolo numero in una stringa, avevo bisogno di generare una serie di nomi di file nel formato 'file1.pdf', 'file2.pdf' ecc. Ecco come lavorato:

['file' + str(i) + '.pdf' for i in range(1,4)]

-1

Devi solo lanciare num varriable in una stringa usando

str(num)
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.