Як помістити змінну всередині рядка?


246

Я хотів би поставити intв string. Це я зараз роблю:

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

Мені потрібно запустити програму на кілька різних номерів, тому я хотів би зробити цикл. Але вставлення такої змінної не працює:

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

Як вставити змінну в рядок Python?

Відповіді:


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

%Оператор, коли після рядка, дозволяє вставити значення в цей рядок з допомогою кодів формату (далі %dв даному випадку). Детальніше дивіться в документації на Python:

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


39
Зауважте, що %оператор застарілий станом на Python 3.1. Новим кращим способом є використання .format()методу, який обговорювався в PEP 3101 і згадується у відповіді Дена МакДогалла.
Кріс Мюллер

498

О, багато, багато способів ...

З'єднання рядків:

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

Специфікатор перетворення:

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

Використання локальних імен змінних:

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

Використання str.format():

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

Використання f-рядків:

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

Використання string.Template:

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

16
Щоб використовувати оператор рядка формату з декількома аргументами, можна використовувати кортеж в якості операнда: 'foo %d, bar %d' % (foo, bar).
fiedl

12
Ваш акуратний вигляд трюку також працює з новим синтаксисом формату:plot.savefig('hanning{num}s.pdf'.format(**locals()))
пікс

13
З введенням f-рядків у Python 3.6 це тепер можна записати як plot.savefig(f'hanning{num}.pdf'). Я додав відповідь з цією інформацією.
joelostblom

виникли проблеми з використанням локальних () всередині функції, що викликає глобальну змінну; використовували% globals (), замість яких працювали
lobi

123

З введенням у формат Python 3.6 форматованих рядкових літералів (коротко "f-рядків") тепер можна записати це з синтаксисом briefer:

>>> name = "Fred"
>>> f"He said his name is {name}."
'He said his name is Fred.'

З прикладом, наведеним у питанні, це виглядатиме так

plot.savefig(f'hanning{num}.pdf')


17

Не впевнений, що саме робить весь опублікований вами код, але щоб відповісти на запитання, поставлене в заголовку, ви можете використовувати + як звичайну функцію concat string, так і str ().

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

Сподіваюся, що це допомагає!


6
Хоча цієї відповіді правильної побудови рядків, +слід уникати, оскільки її надзвичайно дорого
слайтон

6

Загалом, ви можете створювати рядки, використовуючи:

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

4

Якщо ви хочете ввести кілька значень у рядок, яким ви могли б скористатися format

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

У результаті вийде рядок hanning123.pdf. Це можна зробити з будь-яким масивом.


3

У мене була потреба в розширеній версії цього: замість того, щоб вставляти одне число в рядок, мені потрібно було створити ряд назв файлів у формі 'file1.pdf', 'file2.pdf' і т. Д. Ось як це працював:

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

-1

Вам просто потрібно ввести число змінної у рядок за допомогою

str(num)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.