7

在 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

4 回答 4

15

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

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

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

这基本上以相同的方式工作,只是一旦您学习了语法,它就会更强大。

于 2013-01-24T16:46:14.523 回答
5

是的,这正是它的%s 意思;将参数转换为字符串并对其进行插值。

%d您还可以指定其他形式的转换,例如%f将值转换为不同类型的表示。有关详细信息,请参阅字符串格式化操作。

作为替代方案,从 Python 2.6 及更高版本开始,您还可以使用以下.format()方法使用不同形式的字符串格式化:

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

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

于 2013-01-24T16:46:27.280 回答
1

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

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

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

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

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

>>> format(12345, '>10,')
'    12,345'
于 2013-01-24T16:54:39.233 回答
1

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

当你使用 %s 时,你得到的只是对要插入的值调用str () 的结果。

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

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

于 2013-01-24T17:00:27.060 回答