Python中的字符串格式:我可以对所有类型使用%s吗?

时间:2013-01-24 16:45:35

标签: python string floating-point integer string-formatting

在Python中执行字符串格式化时,我注意到%s也将数字转换为字符串。

>>> a = 1
>>> b = 1.1
>>> c = 'hello'
>>> print 'Integer: %s; Float: %s; String: %s' % (a, b, c)
Integer: 1; Float: 1.1; String: hello

我不知道其他变量类型,但这样使用%s是否安全?

肯定比每次都指定类型更快。

4 个答案:

答案 0 :(得分:13)

使用%s自动调用变量str。由于所有内容都已定义__str__,因此您应该能够毫无问题地执行此操作(即不会引发异常)。但是,你实际打印的是另一个故事......

请注意,在较新的python代码中,还有另一个使用format方法的选项:

'Integer: {}; Float: {}; String: {}'.format(a,b,c)

这基本上以相同的方式工作,只要你学习语法后它就会更强大。

答案 1 :(得分:5)

是的,这正是%s 的含义;将参数转换为字符串并插入它。

您还可以指定其他形式的转化,例如%d%f,以便将值转换为不同类型的表示形式。有关详细信息,请参阅String Formatting Operations

作为替代方案,从Python 2.6及更高版本起,您还可以使用不同形式的字符串格式using the .format() method

print 'Integer: {0}; Float: {1}; String: {2}'.format(a, b, c)

该方法提供了一些额外的功能,例如引用对象的属性,映射中的键或列表中的索引来引用值。

答案 2 :(得分:1)

另一种选择是使用新的字符串格式 - 行为方式相同。

>>> 'integer: {} float: {} string: {}'.format(1, 1.1, 'blah')
'integer: 1 float: 1.1 string: blah'

但是,这也意味着您可以代替编写str(obj)而不是:

>>> format(1)
'1'
>>> format(1.1)
'1.1'
>>> format('blah')
'blah'

然后,您可以为它提供格式化选项:

>>> format(12345, '>10,')
'    12,345'

答案 3 :(得分:1)

除了%s之外还有其他运算符的原因是为它们运行的​​数据类型提供特定的格式化功能。

当你使用%s时,所得到的就是在要插值的值上调用 str ()的结果。

因此,使用%s意味着您将无法强制值的表示符合您可能要使用的严格格式,因为您坚持使用 str ()的输出

使用其他运算符,可以指定值的格式。 IE:也许您希望将字符串中的所有浮点数表示为2位小数,而不管数字所需的实际小数位数 - 对于这种情况,%s只是不能完成这项工作。