У меня есть строка, которая выглядит как, '%s in %s'
и я хочу знать, как разделить аргументы, чтобы они были двумя разными% s. Мой разум, пришедший с Java, придумал следующее:
'%s in %s' % unicode(self.author), unicode(self.publication)
Но это не работает, так как это выглядит в Python?
'{} in {}'
строку простого формата.Если вы используете более одного аргумента, он должен быть в кортеже (обратите внимание на дополнительные скобки):
Как указывает EOL,
unicode()
функция обычно принимает кодировку ascii по умолчанию, поэтому, если у вас есть символы не ASCII, безопаснее явно передать кодировку:А в Python 3.0
str.format()
вместо этого предпочтительнее использовать синтаксис:источник
На объекте кортежа / отображения для нескольких аргументов
format
Следующее выдержка из документации:
Ссылки
На
str.format
вместо%
Более новой альтернативой
%
оператору является использованиеstr.format
. Вот выдержка из документации:Ссылки
str.format
- синтаксисПримеры
Вот несколько примеров использования:
Смотрите также
источник
'{self.author} in {self.publication}'.format(self=self)
должно работать». Я просто не уверен во всем этомunicode
.{first[0]}
для получения начальногоJ
.Вы должны просто поместить значения в скобки:
Здесь, за первый будет размещен. А для второго , то будет использоваться.
%s
unicode(self.author)
%s
unicode(self.publication)
источник
%s
а неformat
Существует значительная проблема с некоторыми опубликованными ответами:
unicode()
декодирование из кодировки по умолчанию, которая часто является ASCII; фактическиunicode()
пытается понять смысл байтов, которые он дает, преобразовывая их в символы. Таким образом, следующий код, который по существу является тем, что рекомендуется предыдущими ответами, не работает на моей машине:дает:
Ошибка происходит из-за того, что
author
она не содержит только байты ASCII (то есть со значениями в [0; 127]), иunicode()
декодируется из ASCII по умолчанию (на многих машинах).Надежное решение - явно указать кодировку, используемую в ваших полях; на примере UTF-8:
(или без начального
u
, в зависимости от того, хотите ли вы получить результат Unicode или байтовую строку).На данный момент, можно было бы рассмотреть вопрос, имеющий
author
иpublication
поля являются строками Unicode, вместо того, чтобы декодировать их во время форматирования.источник
Для python2 вы также можете сделать это
что удобно, если у вас есть много аргументов для замены (особенно, если вы делаете интернационализацию)
Python2.6 и выше поддерживает
.format()
источник
Вы также можете использовать это чисто и просто (но неправильно! Потому что вы должны использовать,
format
как сказал Марк Байерс), выполнив:источник
Для полноты, в python 3.6 f-строка введена в PEP-498 . Эти строки позволяют
Это будет означать, что для вашего примера вы также можете использовать:
источник