Подтвердить что ты не робот

Python, строка формата

Я пытаюсь создать строку формата с ленивым аргументом, например мне нужно smth like:

"%s \%s %s" % ('foo', 'bar') # "foo %s bar"

как я могу это сделать?

4b9b3361

Ответ 1

"%s %%s %s" % ('foo', 'bar')

вам нужно %%

Ответ 2

с python 2.6:

>>> '{0} %s {1}'.format('foo', 'bar')
'foo %s bar'

или с помощью python 2.7:

>>> '{} %s {}'.format('foo', 'bar')
'foo %s bar'

Ответ 3

>>> "%s %%s %s" % ('foo', 'bar')
'foo %s bar'

Ответ 4

"%s %%s %s" % ('foo', 'bar') # easy!

Double% chars позволяют помещать% в строки формата.

Ответ 5

%% выводит символ %. Поэтому вам просто нужно написать:

"%s %%s %s" % ('foo', 'bar') # "foo %s bar"

И если вам нужно вывести процент или что-то еще:

>>> "%s %s %%%s" % ('foo', 'bar', '10')
'foo bar %10'

Ответ 6

Просто используйте второй процентный символ.

In [17]: '%s %%s %s' % ('foo', 'bar')
Out[17]: 'foo %s bar'

Ответ 7

Если вы не знаете порядок, в котором будут использоваться аргументы, вы можете использовать строковые шаблоны

Здесь находится сам класс, который представляет собой str с этой функциональностью (только для аргументов ключевого слова)

class StringTemplate(str):
    def __init__(self, template):
        self.templatestr = template

    def format(self, *args, **kws):
        from string import Template
        #check replaced strings are in template, remove if undesired
        for k in kws:
            if not "{"+k+"}" in self:
                raise Exception("Substituted expression '{k}' is not on template string '{s}'".format(k=k, s=self))
        template= Template(self.replace("{", "${")) #string.Template needs variables delimited differently than str.format
        replaced_template= template.safe_substitute(*args, **kws)
        replaced_template_str= replaced_template.replace("${", "{")
        return StringTemplate( replaced_template_str )

Ответ 8

Python 3.6 теперь поддерживает строчную интерполяцию строк с PEP 498. Для вашего варианта использования новый синтаксис позволяет:

var1 = 'foo'
var2 = 'bar'
print(f"{var1} %s {var2}")