Строковые выражения форматирования (Python) - PullRequest
5 голосов
/ 19 ноября 2009

Выражения форматирования строки:

'This is %d %s example!' % (1, 'nice')

Вызов метода форматирования строки:

'This is {0} {1} example!'.format(1, 'nice')

Лично я предпочитаю вызовы методов (второй пример) для удобства чтения, но, поскольку он является новым, существует некоторая вероятность того, что один или другой из них со временем станет устаревшим. Как вы думаете, что менее вероятно, будет объявлено устаревшим?

Ответы [ 3 ]

8 голосов
/ 19 ноября 2009

Ни; первый используется во многих местах, а второй только что был представлен. Поэтому вопрос в том, какой стиль вы предпочитаете. Я на самом деле предпочитаю форматирование dict:

d = { 'count': 1, 'txt': 'nice' }
'This is %(count)d %(txt)s example!' % d

Он гарантирует, что нужный параметр помещается в нужное место, позволяет повторно использовать один и тот же параметр в нескольких местах и ​​т. Д.

6 голосов
/ 19 ноября 2009

Мне показалось, что я прочитал, что оператор % устарел уже в 3.1, поэтому я буду придерживаться функции format().

См. PEP 3101: новый подход к форматированию строк

5 голосов
/ 19 ноября 2009

Первоначальной идеей было постепенное переключение на подход str.format () при одновременном использовании обоих способов:

PEP 3101:
Новая система не вступает в противоречие ни с одним из имен методов существующих методов форматирования строк, поэтому обе системы могут сосуществовать, пока не наступит время для устаревшей системы.

Идея все еще продолжается:

Мы все еще поощряем людей использовать новый str.format (). Python Issue 7343

Поскольку первоначальный подход '%' планируется исключить и удалить в будущем, я бы предложил написать новый код с помощью str.format (). Хотя на данный момент это просто вопрос личных предпочтений. Я лично предпочитаю использовать форматирование на основе словаря, которое поддерживается как оператором '%', так и методом str.format ().

...