在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
是否安全?
肯定比每次都指定类型更快。
答案 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只是不能完成这项工作。