Bir değişkeni dize içine nasıl koyabilirim?


246

Bir koymak istiyorum intbir içine string. Şu anda yaptığım şey bu:

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

Programı birkaç farklı sayı için çalıştırmam gerekiyor, bu yüzden bir döngü yapmak istiyorum. Ancak değişkeni bu şekilde eklemek işe yaramaz:

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

Python dizesine bir değişkeni nasıl ekleyebilirim?

Yanıtlar:


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

%Bir dize izlerken operatörü, biçim kodları aracılığıyla bu dizeyi (içine değerlerini eklemek için izin verir %dbu durumda). Daha fazla ayrıntı için Python belgelerine bakın:

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


39
%Operatörün Python 3.1'den itibaren kullanımdan kaldırıldığını unutmayın . Tercih edilen yeni yol, PEP 3101'de.format() tartışıldığı ve Dan McDougall'ın cevabında belirtildiği gibi yöntemi kullanmaktır .
Chris Mueller

498

Oh, çok, çok yol ...

Dize birleştirme:

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

Dönüşüm Belirteci:

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

Yerel değişken adlarını kullanma:

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

Kullanma str.format():

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

F-stringlerini kullanma:

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

Kullanma string.Template:

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

16
Birden argümanlarla biçim dizesi operatörünü kullanmak için, bir terim olarak bir demet kullanabilirsiniz: 'foo %d, bar %d' % (foo, bar).
fiedl

12
Düzgün hile türünüz de yeni biçim sözdizimi ile çalışır:plot.savefig('hanning{num}s.pdf'.format(**locals()))
pix

13
Python 3.6'da f-dizelerinin tanıtılmasıyla, bu şimdi olarak yazılabilir plot.savefig(f'hanning{num}.pdf'). Bu bilgi ile bir cevap ekledim.
joelostblom

global değişkeni çağıran bir fonksiyonun içinde locals () kullanmayla ilgili sorunlar vardı; kullanılan% globals () kullanılır
lobi


17

Gönderdiğiniz tüm kodların tam olarak ne yaptığından emin değilim, ancak başlıkta sorulan soruyu cevaplamak için, str () yanı sıra normal dize concat işlevi olarak + kullanabilirsiniz.

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

Umarım yardımcı olur!


6
Bu cevap doğru olmasına rağmen +son derece pahalı olduğu gibi bina dizeleri ile kaçınılmalıdır
slayton

6

Genel olarak, aşağıdakileri kullanarak dizeler oluşturabilirsiniz:

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

4

Dizeye birden çok değer koymak isterseniz, format

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

Dizeyle sonuçlanır hanning123.pdf. Bu herhangi bir dizi ile yapılabilir.


3

Bunun genişletilmiş bir sürümüne ihtiyacım vardı: bir dizeye tek bir sayı gömmek yerine, 'dosya1.pdf', 'dosya2.pdf' vb. çalıştı:

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

-1

Sadece değişken değişkenini bir dizeye

str(num)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.