在python字符串格式中,%s支持字符串,整数和浮点数
>>> '%s' % 'a'
'a'
>>> '%s' % 1
'1'
>>> '%s' % 1.1
'1.1'
其中%d仅接受整数并格式化,而%s仅接受%f
>>> '%d' % 1
'1'
>>> '%d' % 'a'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str
为什么%s会单独接受所有三个甚至更多
答案 0 :(得分:3)
%s
明确地将输入转换为字符串。 %s
,%r
和%a
是仅有的三个转换值的占位符。来自printf
-style formatting documentation:
's'
字符串(使用str()
转换任何Python对象)。
因此%s
支持任何对象,因为所有Python对象都支持str()
转换。 %d
不做任何转换。
其他占位符仅支持特定类型。您可能想使用new string formatting syntax(通过str.format()
或f
字符串),其中转换和格式设置类型已分开。可以添加!s
,!r
和!a
,以便在格式化之前先转换值,以保持语法的独特性,并使转换更清晰。
您仍然不能将d
格式应用于字符串,当然,如果要使用d
字段格式,则必须手动将非整数输入值显式转换为整数。
%s
和!s
字符串转换对于否则没有显式格式支持的类型很有用。它允许您接受 any 类型的对象,并仍然在模板字符串中为其提供某种格式,即使只是为了限制字段宽度或设置文本对齐方式。并且仅普遍支持字符串转换,例如,您不能将任意对象转换为整数或浮点数。