Bagaimana cara memasukkan variabel ke dalam string?

246

Saya ingin menempatkan intke dalam string. Inilah yang saya lakukan saat ini:

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

Saya harus menjalankan program untuk beberapa angka yang berbeda, jadi saya ingin melakukan perulangan. Tetapi memasukkan variabel seperti ini tidak berfungsi:

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

Bagaimana cara saya memasukkan variabel ke string Python?

Gish
sumber

Jawaban:

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

The %operator, ketika mengikuti string, memungkinkan Anda untuk memasukkan nilai ke dalam string melalui kode Format (yang %ddalam hal ini). Untuk detail lebih lanjut, lihat dokumentasi Python:

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

Amber
sumber
39
Perhatikan bahwa %operator tidak digunakan lagi pada Python 3.1. Cara baru yang disukai adalah menggunakan .format()metode seperti yang dibahas dalam PEP 3101 dan disebutkan dalam jawaban Dan McDougall.
Chris Mueller
496

Oh, banyak, banyak cara ...

Rangkaian string:

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

Penentu Konversi:

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

Menggunakan nama variabel lokal:

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

Menggunakan str.format():

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

Menggunakan f-string:

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

Menggunakan string.Template:

plot.savefig(string.Template('hanning${num}.pdf').substitute(locals()))
Dan McDougall
sumber
16
Untuk menggunakan operator format string dengan beberapa argumen, satu dapat menggunakan tuple sebagai operan: 'foo %d, bar %d' % (foo, bar).
fiedl
12
Trik rapi Anda berfungsi dengan sintaks format baru juga:plot.savefig('hanning{num}s.pdf'.format(**locals()))
pix
13
Dengan diperkenalkannya f-string di Python 3.6, ini sekarang dapat ditulis sebagai plot.savefig(f'hanning{num}.pdf'). Saya menambahkan jawaban dengan info ini.
joelostblom
memiliki masalah menggunakan penduduk lokal () di dalam fungsi yang memanggil variabel global; digunakan% global () sebagai gantinya yang bekerja
lobi
17

Tidak yakin persis apa yang dilakukan semua kode yang Anda posting, tetapi untuk menjawab pertanyaan yang diajukan dalam judul, Anda dapat menggunakan + sebagai fungsi concat string normal dan juga str ().

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

Semoga itu bisa membantu!

goggin13
sumber
6
Walaupun jawaban ini benar, maka +harus dihindari karena sangat mahal
slayton
6

Secara umum, Anda dapat membuat string menggunakan:

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

Jika Anda ingin memasukkan beberapa nilai ke dalam string, Anda dapat menggunakannya format

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

Akan menghasilkan string hanning123.pdf. Ini bisa dilakukan dengan array apa pun.

Jonathan R
sumber
3

Saya memiliki kebutuhan untuk versi yang diperluas dari ini: alih-alih menyematkan nomor tunggal dalam sebuah string, saya perlu membuat serangkaian nama file dari bentuk 'file1.pdf', 'file2.pdf' dll. Ini adalah caranya bekerja:

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

Anda hanya perlu memasukkan num varriable ke string menggunakan

str(num)
Ole
sumber