Это все информативные ответы, но ни один из них не совсем понимает, в чем разница между %s
и %d
.
%s
указывает форматировщику вызвать функцию str()
для аргумента, и, поскольку мы по определению приводим строку, %s
, по сути, просто выполняет str(arg)
.
%d
, с другой стороны, вызывает int()
для аргумента перед вызовом str()
, например str(int(arg))
, это приведет к принуждению int
и принуждению str
.
Например, я могу преобразовать шестнадцатеричное значение в десятичное,
>>> '%d' % 0x15
'21'
или обрезать поплавок.
>>> '%d' % 34.5
'34'
Но операция вызовет исключение, если аргумент не является числом.
>>> '%d' % 'thirteen'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str
Так что, если целью является просто вызвать str(arg)
, тогда достаточно %s
, но если вам нужно дополнительное форматирование (например, форматирование с плавающей запятой) или другое приведение, тогда нужны другие символы формата.
В нотации f-string
, когда вы не используете форматтер, по умолчанию используется значение str
.
>>> a = 'some_string'
>>> f'{a:s}'
'some_string'
>>> a = 'some_string'
>>> f'{a}'
'some_string'
То же самое относится к string.format
; по умолчанию str
.
>>> '{}'.format(a)
'some_string'
>>> '{!s}'.format(a)
'some_string'