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.